- PR -

ant について

投稿者投稿内容
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-01-25 09:57
javaタスクにfork="true"をつけて見てはいかがですか。

<java classname="chkxml" fork="true">
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-01-25 10:25
まさに、それを今試していました。

antで使っているXMLのパーサと別のパーサを使っていたので fork="yes" だけでは、結局駄目でした。(先のエラーだけは回避できましたが、別の問題(これは当方固有の問題)が発生していました。)
java.class.path に ant で使用しているパーサのjarが含まれていてそれが先に呼び出されるため別のエラーとなってしまっていました。

以下のようにして、java.ext.dirs に使用したいXMLパーサのjarをいれることで、とりあえず正常に動いています。

コード:
    <java classname="chkxml" fork="yes" dir=".">
      <sysproperty key="java.ext.dirs" value="${ext}"/>



<java>タスクには<classpath>を設定しているのに、何故antのライブラリが含まれて動作してしまうのでしょう?(しかも、別JVMなのに。同じJVMならまだ分かるが…)

もっと、きれいな方法があればよいのですが、とりあえずはこれで問題ないのでこのままいこうと思います。

P.S. それにしても、わかりにくいエラーメッセージだ。。。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-01-25 11:30
引用:

ふうたさんの書き込み (2002-01-25 10:25) より:

<java>タスクには<classpath>を設定しているのに、何故antのライブラリが含まれて動作してしまうのでしょう?(しかも、別JVMなのに。同じJVMならまだ分かるが…)



antに-debug(や-verbose)をつけて実行したとき、コンソールに次のように出力されますが、出力されたクラスパスは正しいですか?

[java] Forking C:jdk1.3\jre\bin\java.exe -classpath ....
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-01-25 11:59
java.class.path は、ant に -debug オプションをつけたときのログを見て確認しています。

ご指摘の javaタスクのログを確認すると、-classpath には build.xml で指定したものだけがありました。もちろん、ここには当方で使用している富士通のXMLライブラリを指定しています。(antのライブラリは含まれていませんでした。)

先の投稿に書いたように java.ext.dirs に富士通のXMLライブラリを入れると動作しているので、-classpath に設定したライブラリより先に ant のライブラリが読みこまれてしまったのかなと考えました。(エラーの内容が「org.xml.sax.SAXException: SAX2 driver class com.fujitsu.xml.parser.XMLReader not found」なので、何かしらのXMLパーサがエラーを返しています。)

という状況なのですが、どう思われますでしょうか?
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-01-25 12:44
すいません、もうひとつだけ質問させてください。
クラスパスの指定方法は、次のどちらですか?

1) <java classpathref="..">

2) <java ..>
<classpath>
...
</classpath>
</java>

ふうたさんの投稿を見ると、2)のような印象を受けるのですが、1)も試してみる価値があると思います。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-01-25 14:14
おっしゃる通り 2)の方法でした。
1)もやってみましたが、全く同じ結果です。

ちなみに何故、試す価値があったのでしょうか?
<classpath> は、debugオプション時の javaタスクでちゃんと表示されていれば、XMLをどういうふうに書いても同じなのかなと思ったりしたのですが?


miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-01-25 14:46
>ちなみに何故、試す価値があったのでしょうか?

ふうたさん、ごめんなさい。

もし、これが仕様なら世界中の人が同じ問題で困っているはずだと思い、apacheのバグデータベースとgoogleで片っ端から調べてみましたが、私には同じ問題は見つかりませんでした。

だとすれば、単に使い方が間違っているのではないかと疑ったわけです。
実際に1)の使い方はないかと、同じくgoogleで探してみたところ、そのような使い方をした例(fork="yes"とclasspathrefの併用)例が見つかったので、もしかしたらforkの場合に適用されるクラスパスの指定の方法が違うのでは、と思ったわけです。

失礼しました。

miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-01-25 15:01
ふうたさん、

別のアイディアです。
これもgoogleから拾ってきたものです。

<java classname="chkxml" fork="yes" jvmargs="-classpath ${java.class.path}">

[ メッセージ編集済み 編集者: miki 編集日時 2002-01-25 15:43 ]

スキルアップ/キャリアアップ(JOB@IT)