2017-08-15 12 views
1

Mavenユニットテストを実行するときに、次のmaven引数を追加して、 "dir"を目的のクラスパスに置き換えて、JVMクラスパス引数を追加しようとしています。動的にMaven Surefire JVMのクラスパスを設定します

MAVEN_OPTS = -cp "DIR"

この正しく、その後の取得しかし、Javaの引数

に追加私の "DIR" 正しくクラスパスに追加されることはありません。

ClassLoader cl = ClassLoader.getSystemClassLoader(); 
URL[] urls = ((URLClassLoader)cl).getURLs(); 

答えて

1

とクラスパスをプリントアウトする際にクラスパスで目的のファイルが見つからされることはありませんし、常に不足している テストを実行するときに使用中のMavenとJVMで実行JVMの違いがあります。

surefireプラグインは、独自のJVMを生成してテストケースを実行します。プロジェクトの依存関係

  • プロジェクトのテスト-classesディレクトリ
    • プロジェクトのclassesディレクトリ:デフォルトでは、次のようにJVMのクラスパスということが含まれます。

    あなたの質問が正しく理解されている場合は、テストを実行しているJVMのクラスパスに別のディレクトリを追加します。

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.20</version> 
        <configuration> 
         <additionalClasspathElements> 
         <additionalClasspathElement>path/to/your/additional/directory</additionalClasspathElement> 
         </additionalClasspathElements> 
        </configuration> 
    </plugin> 
    

    詳細here:もしそうなら、あなたはそうのような追加のクラスパスエントリを追加することができます。

    あなたは(MAVEN_OPTSのあなたの言及が示すように)動的にコマンドラインパラメータを経由して確実なJVMが使用するクラスパスを変更したい場合、あなたはこのようなadditionalClasspathElementを定義することができます...

    <additionalClasspathElement>${additionalClasspathDir}</additionalClasspathElement> 
    

    ..そして次のようにMavenを呼び出します:

    mvn test -DadditionalClasspathDir=path/to/your/additional/directory 
    
    +0

    これらのパスに変数を追加する方法はありますか?maven opsの場合は?私たちはpomファイルにハードコードされたパスを持っていません。 – Johng

    +0

    surefireプラグインで使用されるクラスパスを動的に変更するという要件に対処するために私の答えを更新しました。確かなプラグインは、クラスパスをどのように作成するのか、またあなたの望むディレクトリがプロジェクトのクラスパス上にまだ存在せず、それに追加できないのかどうかは明らかです([Maven Build Helper Plugin](http://www.mojohaus.org/build) -helper-maven-plugin /)など)を使用している場合は、 'additionalClasspathElements'を使用してください。 – glytching

    +0

    これはうまくいきました。変数に-D接頭辞を追加するだけでした – Johng

    関連する問題