使用しようとしている Ant build.xml スクリプトがあります。その中で、いくつかの junit テストを実行するための taskdef を追加しました。しかし、恐ろしいクラスパスの問題に直面しています。
これは weblogic アプリケーションであるため、Weblogic は ANT_HOME を Weblogic ANT バージョン 1.6.5 に設定します。さらに、JUnit 4 を使用しようとしていますが、Weblogic に付属の JUnit は JUnit 3 ベースです (私は信じています)。
Weblogic バージョンで実行するのではなく、プロジェクトでチェックインした Ant および JUnit jar を使用するように Ant に指示するのは簡単なことだと思いましたが、これを機能させることができませんでした。
これが私が今持っているものです:
<path id="junit.classpath">
<fileset dir="${applib.dir}">
<include name="junit-4.10.jar"/>
</fileset>
</path>
<taskdef name="myjunit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"
classpathref="junit.classpath">
<classpath>
<!-- These are here so that the junit task runs with these jars, which works -->
<pathelement location="${applib.dir}/junit-4.10.jar"/>
<pathelement location="${applib.dir}/ant-1.8.2/ant-junit4.jar"/>
</classpath>
</taskdef>
ただし、何をしても、Ant のクラスパスには JUnit/framework/Test が含まれていません。
BUILD FAILED
C:\build.xml:219: taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask cannot be found: j
unit/framework/Test
問題は、Weblogic によって ANT_HOME が設定されているため、Ant の起動時に ant-junit.jar がクラスパスに追加されていることだと思います。ant -diagnostics はこれを確認します。
これを解決できた唯一の方法は、junit-4.10.jar をクラスパスに直接配置するか、BEA ANT_HOME ライブラリ ディレクトリに配置することです。ただし、それは本番環境では機能しません。
では、タスク定義によって Ant がクラッシュしないように、junit-4.10.jar を Ant クラスパスに追加するにはどうすればよいでしょうか。
- このタスクは、コードのビルド中に JUnit テストを実行するためにのみ使用され、デプロイには必要ありません。
- このスクリプトを使用するすべてのマシンに ANT と JUNIT をインストールすることは、実際にはオプションではありません。
- 複数のプラットフォーム (UNIX および Windows) で同じビルド スクリプトを実行できる必要があります。Windows はコードのビルド用、Linux は Weblogic へのデプロイ用です。
- 問題のタスクを実行するつもりもない展開段階で Ant をシャットダウンするためだけに、本番パッケージで JUnit および ANT jar を提供する必要はありません。
- junit テストをコンパイル/実行するためだけに個別の build.xml ファイルを用意することもできますが、それではコードが重複し、面倒なように思えます。
これに対処する方法について何か提案はありますか?