Maven / Surefireユニットテストの「mvntest」の実行中にマニフェストを使用可能にするにはどうすればよいですか?
単体テストを含め、AntからMavenに変換するオープンソースプロジェクトがあります。Mavenプロジェクトのプロジェクトソースリポジトリは次のとおりです:http: //github.com/znerd/logdoc
私の質問は、「ベース」と呼ばれるプライマリモジュールに関するものです。getVersion()
このモジュールには、クラス内の静的メソッドの動作をテストする単体テストがありますorg.znerd.logdoc.Library
。このメソッドは以下を返します:
Library.class.getPackage().getImplementationVersion()
このgetImplementationVersion()
メソッドは、マニフェストファイルの設定値を返します。ここまでは順調ですね。META-INF/MANIFEST.MF
私は過去にこれをテストしましたが、マニフェストがパスのクラスパス(ファイルシステムまたはJARファイル内)で実際に使用可能である限り、正常に機能します。
今の私の課題は、単体テストを実行するとマニフェストファイルが利用できないことです。
mvn test
Surefireは単体テストを実行しますが、単体テストが失敗し、メッセージがLibrary.getVersion()
返されたことを示しnull
ます。
JARを確認したいのですが、まだ生成されていないことがわかります。Maven / Surefireは、リソースがクラスパスに追加される前に、クラスに対して単体テストを実行します。
さらに調査すると、Surefireは一時ディレクトリに独自のJARファイルを生成します。
/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar
次に、このJARを使用してLibraryクラスをロードします。このJARには、私がスタックしたリソースが含まれていませんsrc/main/resources
。したがって、ファイルを置くことMETA-INF/MANIFEST.MF
も機能しません。
META-INF/MANIFEST.MF
では、クラスと同じクラスローダーからファイルを利用できるようにSurefireに指示するにはどうすればよいですかLibrary
。
Mac OS X10.6.2ではJUnit4.8.1でMaven2.2.0、Java1.6.0_17を使用していることに注意してください。