Java Linux中process exec maven插件(bazaarvoice)的类路径问题
我正在使用process exec maven插件(bazaarvoice)为我的集成测试执行几个流程。我的公司对如何使用工件有一些要求。主进程(MyMaven模块)打包在一个jar中(例如:my-app-1.0-SNAPSHOT.jar),其余依赖项(jar)必须位于目标内部的文件夹/lib中。因此,需要在类路径中添加jar文件和/lib文件夹Java Linux中process exec maven插件(bazaarvoice)的类路径问题,java,maven,jenkins,Java,Maven,Jenkins,我正在使用process exec maven插件(bazaarvoice)为我的集成测试执行几个流程。我的公司对如何使用工件有一些要求。主进程(MyMaven模块)打包在一个jar中(例如:my-app-1.0-SNAPSHOT.jar),其余依赖项(jar)必须位于目标内部的文件夹/lib中。因此,需要在类路径中添加jar文件和/lib文件夹 <plugin> <groupId>com.bazaarvoice.maven.plugins</groupId
<plugin>
<groupId>com.bazaarvoice.maven.plugins</groupId>
<artifactId>process-exec-maven-plugin</artifactId>
<version>0.7</version>
<executions>
<!-- before I have other executions -->
<execution>
<id>demo-process</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<name>demo-process</name>
<processLogFile>${project.build.directory}/logs/my-log.log</processLogFile>
<arguments>
<argument>java</argument>
<argument>-cp</argument>
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*</argument>
<argument>com.example.Main</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
com.bazaarvoice.maven.plugins
processexecmaven插件
0.7
演示过程
预集成测试
开始
演示过程
${project.build.directory}/logs/my-log.log
JAVA
-cp
${project.artifactId}-${project.version}.jar${path.separator}lib/*
com.example.Main
这个很好用
现在,/lib文件夹中的一个依赖项正在尝试访问当前项目的资源(属性文件)。因此,我需要将资源所在的文件夹添加到类路径中
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/</argument>
${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/
此更改在使用Windows的本地环境中也可以正常工作
但是,当我在Jenkins(Linux环境)中运行应用程序的管道时,它失败了,因为找不到主类。我的应用程序(my-app-1.0-SNAPSHOT.jar)的jar现在没有添加到类路径中。所以它在本地运行良好,但在詹金斯总是失败
我尝试过使用插件在pom中配置类路径的不同方法,但总是失败
我试过用引号
<argument>"${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/"</argument>
“${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${project.build.testOutputDirectory}/”
还使用${project.build.directory}
<argument>${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${${project.build.directory}/test-classes</argument>
${project.artifactId}-${project.version}.jar${path.separator}lib/*${path.separator}${${project.build.directory}/test classes
还改变了顺序
<argument>${project.build.testOutputDirectory}${path.separator}${project.artifactId}-${project.version}.jar${path.separator}lib/*</argument>
${project.build.testOutputDirectory}${path.separator}${project.artifactId}-${project.version}.jar${path.separator}lib/*
我还尝试删除*并使用不同版本的插件0.8、0.9。
我总是得到相同的结果,它在Windows的本地环境中运行良好,但在Linux中无法让java进程在管道中运行
有什么想法吗?你有没有试过在调试模式下运行maven
mvn-X…
并检查正在执行的确切java命令?当你在maven之外执行该命令时会发生什么?你有没有想过,我在Jenkins上也遇到了错误,并且在我的本地mac OS上运行良好,我得到了java.lang.runtimeException离子:即使在Jenkins上90秒后,过程也不正常