我有一个多模块 Maven 项目,它有一个主 pom 和许多子目录,每个子目录都包含引用主 pom 的项目(和 pom.xml 文件)。
在 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
我有第二个项目 projectB,它依赖于 projectA。我在 projectB 的 pom.xml 文件中配置了一个 exec-maven-plugin 部分,该部分与上面的相同。当我使用与上面相同的命令运行 maven 时(除了 -pl 参数中的 projectB ),我得到了异常java.lang.ClassNotFoundException: com.mycompany.Testclass
。
显然,这是因为当我为 projectB 运行 maven 时的类路径不包括 projectA 中的目录,即使 pom.xml 依赖于 projectA(实际上它依赖于 projectA.1,而 projectA.1 又依赖于 projectA)。
我尝试在 projectB 中切换为使用 exec 目标而不是 java 目标,然后在参数中提供类路径,如下所示:
<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-maven-plugin 的 java 目标而不是 exec 目标,但是一种或另一种方式我必须能够指定类路径。
任何想法我该怎么做?
谢谢。