マスターpomと、マスターpomを参照するプロジェクト(およびpom.xmlファイル)をそれぞれ含む多数のサブディレクトリを持つマルチモジュールMavenプロジェクトがあります。
projectA には exec-maven-plugin の呼び出しが含まれています。これは Java ゴールを実行し、projectA のどこかに存在するテスト クラス (projectA/test/com/mycompany/Testclass.java) を正常に呼び出します。プラグインは次のように宣言されています: org.codehaus.mojo exec-maven-plugin 1.2.1
<execution>
<id>execute-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.mycompany.Testclass</mainClass>
<classpathScope>test</classpathScope>
</configuration>
</execution>
</executions>
</plugin>
次のコマンドで maven を実行すると、正常に動作します。
mvn verify -P <profile name> -pl projectA -am
projectA に依存する 2 番目のプロジェクト projectB があります。上記と同じ、projectB の pom.xml ファイルに exec-maven-plugin セクションを構成しました。上記と同じコマンドで maven を実行すると (-pl パラメータの projectB を除く)、例外が発生しますjava.lang.ClassNotFoundException: com.mycompany.Testclass。
これは、pom.xml が projectA に依存しているにもかかわらず、projectB の maven を実行したときのクラスパスに projectA のディレクトリが含まれていないためです (実際には projectA.1 に依存し、これは projectA に依存します)。
projectB で Java ゴールではなく exec ゴールを使用するように切り替えてから、次のように引数にクラスパスを指定しようとしました。
<execution>
<id>execute-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<argument>"../projectA/target/projectA-6.6.1-bSOURCE-tests.jar;../projectA/target/projectA-6.6.1-bSOURCE.jar"</argument>
<argument>com.mycompany.Testclass</argument>
</arguments>
<classpathScope>test</classpathScope>
</configuration>
</execution>
それが完了したら、クラスを正常にロードしましたが、com.google.gson.JsonSyntaxException で ClassNotFoundException を取得しました
次のように、コマンドラインからクラスを実行した場合に発生するのと同じエラーになります。
java -classpath "projectA/target/projectA-6.6.1-bSOURCE-tests.jar;projectA/target/projectA-6.6.1-bSOURCE.jar" com.mycompany.Testclass
projectB では、exec ゴールではなく exec-maven-plugin の Java ゴールを使用したいと思いますが、何らかの方法でクラスパスを指定できるようにする必要があります。
どのように私はそれを行うことができますか?
ありがとう。