1

何ヶ月も機能していた Ant junit タスクが、以前は見つかっていたクラスの NoClassDefFoundError で突然失敗します。junitタスクに組み込まれているクラスパスを表示する方法はありますか?

<target name="basic-junit-test" description="Run a single JUnit test. ">

    <junit printsummary="yes" fork="no" haltonfailure="yes">
        <classpath>
            <pathelement location="target/WEB-INF/lib/log4j-1.2.16.jar"/> 
            .
            . many other pathelements
            .
        </classpath>
        <test name="com.mycompany.command.TestUNLOCKACCOUNTCommand" outfile="${report.dir}/junit_test_results" />
    </junit>
</target>
4

3 に答える 3

6

私は、ビルドの先頭で Ant パスを宣言し、さまざまなタスクでクラスパス参照を使用することの大ファンです。

パス変換タスクを使用して、クラスパスの内容をプロパティとして出力できます。

<path id="test.path">
    <pathelement location="target/WEB-INF/lib/log4j-1.2.16.jar"/> 
    .
    . many other pathelements
    .
</path>

<target name="echo-path" description="Echo test path">
    <pathconvert targetos="unix" property="test.path.unix" refid="test.path">
    <echo message="Test path: ${test.path.unix}"/>
</target>

<target name="basic-junit-test" depends="echo-path" description="Run a single JUnit test. ">

    <junit printsummary="yes" fork="no" haltonfailure="yes">
        <classpath>
            <path refid="test.path"/>
        </classpath>
        <test name="com.mycompany.command.TestUNLOCKACCOUNTCommand" outfile="${report.dir}/junit_test_results" />
    </junit>
</target>

アップデート

ふと思いついたのですが、Ant をデバッグ モードで実行するのがさらに簡単な解決策かもしれません。

于 2013-07-18T22:17:13.163 に答える
0

これは私の質問に対する実際の回答ではありません。Mark O'Connor と Rebse は優れた回答を提供してくれましたが、代わりに、これは何が起こって私がこの質問をするようになったのかについてのより完全な説明です。約 100 のコントローラー クラスを開発するために使用した ANT Junit タスクがありました。数か月ぶりに使用しましたが、すべてのテストが classNotFound 例外で失敗しました。見つからなかったクラスは、クラスパスにあるはずのクラスでした。ローカルで作成された jar ファイルで、ビルド用に自動的に取得されました。どういうわけかクラスパスに問題があると思ったので、テストを実行したときにそれを表示したかったのです。

何が起こっているのかを突き止めようと何度も試みた後、classNotFound 例外を生成していたコードの周りに try ブロックを置いたところ、ローカル クラスは見つからなかったクラスではないことがわかりました。これにより、lib ディレクトリを検索し、最終的に (約 6 時間後)、古いバージョンの slf4j-api を新しいバージョンに置き換えたことに問題があることに気付きました。古いバージョンにはあったが新しいバージョンにはなかったメソッドへの依存がありました。

于 2013-07-19T18:23:43.327 に答える
0

マークの回答は役に立ちましたが、回答の例をコピーするときに pathconvert xml 要素を閉じる必要があったため、簡単にメモしておきます。

<pathconvert targetos="unix" property="test.path.unix" refid="test.path" />
于 2014-11-19T15:37:47.503 に答える