9

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を使用していることに注意してください。

4

1 に答える 1

2

さて、あなたが指摘したように、問題はMANIFEST.MFが生成さpackageれ、最終的な jar に直接含まれ、すべてが の後に発生することtestです。したがって、次のいずれかを行う必要があると思います。

  • 独自の MANIFEST.MFを提供します(これはtarget/classesでマージされる前にで使用できますpackage)。これがオプションであるかどうか(そしてそれが機能するかどうか)はわかりません。
  • JAR に応じて、別のモジュールからテストを配置して実行します。
于 2010-05-26T21:08:09.337 に答える