- - PR -
ant について
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-01-25 16:09
いろいろ調べてもらっておきながら、こんなことを言うのは申し訳ないのですが。やっぱり私のミスでした。(さんざんいっておきながら…) 元の java.ext.dirs で指定されるディレクトリなのですが、javaがよく分かっていない時にいろいろ入れてしまっていて訳分からなくなったのでサブディレクトリを作ってそこに退避しておいたのですが、ant だとサブディレクトリにあるライブラリまで読込んでしまうようです。 (java.ext.dirs を変えたら動いたのはそのためでした。) サブディレクトリごと全く違うフォルダに移動したら動いてしまいました…。 単に java コマンドで動かしている時は、サブディレクトリのライブラリは読みこまないので大丈夫だったということです。 大変失礼しました。 [ メッセージ編集済み 編集者: ふうた 編集日時 2002-01-25 16:10 ] | ||||||||
|
投稿日時: 2002-01-25 16:27
追記です。
先の修正により、fork="yes" の指定をなくしても、最初の D:\hoge\build.xml:33: java.lang.IllegalAccessException のエラーは出なくなりました。(結局なんだったんだ?!) もともと、ant を入れようと思ったのが、コンパイルや実行時に使用するライブラリを明確にしたいというのが頭にあったので、今回のことでライブラリがだいぶすっきりしてきて、怪我の功名でした。(振り回された方には申し訳ないのですが…) お騒がせしました。 | ||||||||
|
投稿日時: 2002-01-25 16:29
ふうたさん、
私もクラスパスではさんざん苦労をしているので、こうやってAntを調べていくのは自分のためでもあります(し、楽しんでいます)。 ところで、最近、私がAntで悩んでいたことはcopyタスクにfiltering="yes"を指定したとき、コピーした結果のエンコーディングがデフォルトエンコーディングになってしまうということです(エンコーディングを明示的に指定していないので当然の結果です)。 Antのフィルタは、@today@のように@で挟んでおくと、その文字列をコピー時に差し替えることができるものです。たとえば、最終更新日をこのようにして指定しておいて、tstampを使って日付を取り出してフィルタに指定すれば、文書に自動的に更新日を埋め込むことができます。
私の場合は、文書はUTF-8で書かれてたXMLファイルで、それをAntでビルドするとHTMLになるというものでした。ところが、Antを実行するとHTMLファイルは文字化けを起こしてしまいます。Antのビルドスクリプトは私の書いたものではなく(しかも複雑)、私自身がAntのフィルタをまったく理解していなかったので、ビルドスクリプトのどの部分で文字化けがおこっているのか皆目わかりませんでした。 原因は、最初に書いたように、Antがcopyをするときに、ファイルのエンコーディングをUTF-8からEUC-JPに変換してしまっていたのでした。対処方法としてはLANG=Cでビルドするか、XMLファイルのエンコーディングをUTFからEUC-JPに変換することでした。 このように、Antは属性ひとつの指定の有無で、結果が全く異なることがあります。 でも、とてもおもしろい。 また、Antネタをお願いします。 [ メッセージ編集済み 編集者: miki 編集日時 2002-01-25 16:37 ] [ メッセージ編集済み 編集者: miki 編集日時 2002-01-25 16:40 ] | ||||||||
|
投稿日時: 2002-01-25 17:16
調子にのってもう一つ。 いろいろ使っていくうちに、あーしたい/こーしたいが出てきます。。。 マニュアルを見ると、 <target name="build-module-A" if="module-A-present"/> <target name="build-own-fake-module-A" unless="module-A-present"/> で、タスクの制御ができるとありますが、例えばどんな使い方があるでしょうか? とりあえず、私は
のように、デフォルト値の設定で使うしか思いついていません。 本当はもっと細かく、例えばantの起動引数でオプション(-D)をつければ、タスクのオプションを変化させるといったことがしたいのですが。。。 今のままだと、タスクのオプションの組み合わせ毎にターゲットが増えていきそうです。 制御的によい例があれば教えてください。 | ||||||||
|
投稿日時: 2002-01-25 18:17
Ant FAQに参考になりそうな例があります。
http://jakarta.apache.org/ant/faq.html#multi-conditions Ant 1.4ではconditionというタスクが増えていますね。 | ||||||||
|
投稿日時: 2002-01-29 10:36
遅い反応ですみません。
参考になる例をありがとうございます。 教えていただいた例では、 ant -Dprop1=aaa -Dprop2=bbb のように、prop1 と prop2 の値が設定されている時のみ yes と表示されるようですが、例のbuild.xml にある $${prop1} の $${} ってどういう意味なのでしょうか? (ant1.4 からのものなのでしょうか?) また、タスクのオプションを変える方法ですが、以下のようにしても出来そうです。 <target name="init_verbose" unless="verbose"> <property name="verbose" value="no"/> </target> <target name="init_param" depends="init_verbose"/> <target name="compile" depends="prepare, init_param"> <javac destdir="${build}" verbose="${verbose}"> (以下省略) ant -Dverbose=yes とすると、コンパイルで verbose オプションを 指定したことになります。 (<target name="init_param" depends="init_verbose"/> は、パラメータが 増えた時のことを考慮しています。) あと、javaタスク実行時に また例の java.lang.IllegalAccessException が 出ることがありました。 (この場合は、XML SDKは使用していませんが、別のライブラリを使用しています。) とりあえず fork="yes" で逃げれていますが、どういう時にこのエラーが出るのか よく分かっていないので困っています。 | ||||||||
|
投稿日時: 2002-01-29 11:23
最初はタイプミスかとも思いましたが、Ant FAQを注意深く読むと... This version takes advantage of two things: ●If a property a has not been set, ${a} will evaluate to ${a}. ●To get a literal $ in Ant, you have to escape it with another $ - this will also break the special treatment of the sequence ${. This is neither readable, nor easy to understand, therefore post-1.4.1 Ant introduces the <isset> element to the <condition> task. 最初の黒丸を読むと、プロパティがセットされていなければ、${a}は${a}のまま評価されるとあります。例えば${prop1}は、セットされていなければ"${prop1}"という文字列として扱われるということです(これはAntを使っているとよく経験することですね) 2番目の黒丸を読むと、$を文字として扱いたい場合は$をもうひとつつけてエスケープしろ、と書いてあります。$${prop1}というのは"${prop1}"という文字列を表すということでしょうか。 つまり、これらは"${prop1}"という文字列の比較(equals)によってプロパティが設定されているかどうかを判断しているということです。とてもわかりにくいですね。そこで、その後の段落で、1.4.1以降で、<isset>要素を追加した、という流れになります。 IllegalAccessExceptionの方は、まったくわかりません。 | ||||||||
|
投稿日時: 2002-01-29 21:18
分かりやすいご説明ありがとうございます。納得しました。 私の使っているバージョンが、1.4 だったので、1.4.1 にバージョンアップして試しています。 ところが、condition タスクに isset を含むbuild.xml を使ってみると、以下のエラーが出てしまいます。 D:\hoge\build.xml:23: Class org.apache.tools.ant.taskdefs.condition. And doesn't support the nested "isset" element. build.xml は、以下のような感じで、例と同じなのですが…
ant -version でバージョンを確認しても Ant version 1.4.1 compiled on October 11 2001 と表示されていますし。。。 なんかいろいろ起こりますねぇ。。。 (使う人が悪いだけ? [ メッセージ編集済み 編集者: ふうた 編集日時 2002-01-29 21:28 ] | ||||||||
