Maven 2 如果exec:java目标失败,我怎么能让Maven构建失败呢?
我们正在使用MavenMaven 2 如果exec:java目标失败,我怎么能让Maven构建失败呢?,maven-2,Maven 2,我们正在使用Mavenexec:java目标来运行一个定制的java应用程序,该应用程序配置一个数据库以用于我们的集成测试。我们希望在exec:exec上使用exec:java,以便能够在要使用的主类的类路径中使用项目依赖项。 有几次应用程序由于正当的原因失败了,但是Maven构建继续进行,就好像什么都没有出错一样 是否有任何“failonerror”类型的参数可与exec:java一起使用?我害怕将system.exit()代码添加到正在运行的类中,因为我怀疑它不仅会杀死它自己,而且还会杀死M
exec:java
目标来运行一个定制的java应用程序,该应用程序配置一个数据库以用于我们的集成测试。我们希望在exec:exec
上使用exec:java
,以便能够在要使用的主类的类路径中使用项目依赖项。
有几次应用程序由于正当的原因失败了,但是Maven构建继续进行,就好像什么都没有出错一样
是否有任何“failonerror”类型的参数可与
exec:java
一起使用?我害怕将system.exit()
代码添加到正在运行的类中,因为我怀疑它不仅会杀死它自己,而且还会杀死Maven本身,因为它正在Maven VM中运行。这不是它默认具有的功能,但您可能希望在处请求它,因为这是一个简单的添加
如果希望exec:java
使生成失败,则main
调用需要抛出异常,而不是返回非零的退出代码
如果这不是一个选项,您仍然可以使用exec:exec
——有关如何将项目依赖项添加到类路径的说明,请参阅
如果出于某种原因,这两种方法都不合适,那么进一步的选择是将AntRun插件与
任务一起使用。项目依赖关系也可以传递到其中。我刚刚用POM中声明的以下插件配置做了一个简单的测试:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>my-exec-java</id>
<phase>pre-integration-test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.Main</mainClass>
</configuration>
</plugin>
...
</plugins>
...
</build>
</project>
这就是调用集成测试阶段时得到的结果:
$ mvn clean integration-test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building q2363055
[INFO] task-segment: [clean, integration-test]
[INFO] ------------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/pascal/Projects/stackoverflow/q2363055/target/q2363055-1.0-SNAPSHOT.jar
[INFO] Preparing exec:java
[WARNING] Removing: java from forked lifecycle, to prevent recursive invocation.
[INFO] No goals needed for project - skipping
[INFO] [exec:java {execution: my-exec-java}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An exception occured while executing the Java class. null
A problem occured
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19 seconds
[INFO] Finished at: Tue Mar 02 23:40:32 CET 2010
[INFO] Final Memory: 16M/79M
[INFO] ------------------------------------------------------------------------
$mvn清洁集成测试
[信息]正在扫描项目。。。
[信息]------------------------------------------------------------------------
[信息]q2363055号楼
[信息]任务段:[清理,集成测试]
[信息]------------------------------------------------------------------------
...
[INFO][jar:jar{执行:默认jar}]
[信息]构建jar:/home/pascal/Projects/stackoverflow/q2363055/target/q2363055-1.0-SNAPSHOT.jar
[信息]准备执行:java
[警告]从分叉生命周期中删除java,以防止递归调用。
[信息]项目不需要目标-跳过
[INFO][exec:java{execution:my exec java}]
[信息]------------------------------------------------------------------------
[错误]生成错误
[信息]------------------------------------------------------------------------
[信息]执行Java类时发生异常。无效的
出现了一个问题
[信息]------------------------------------------------------------------------
[信息]有关更多信息,请使用-e开关运行Maven
[信息]------------------------------------------------------------------------
[信息]总时间:19秒
[信息]完成时间:2010年3月2日星期二23:40:32 CET
[信息]最终内存:16M/79M
[信息]------------------------------------------------------------------------
由于生成错误,集成
阶段从未执行
所以问题是,如何处理加载数据库的Java类中的错误?抛出异常是一个选项吗?除了抛出异常之外,您还可以使用
系统。退出(n)
,其中n为非零会导致maven构建失败。对于java目标系统。退出(n),其中n为非零将不起作用。需要抛出java异常。是否可以使用exec:exec,在这种情况下,我想您可以使用返回码?谢谢Pascal。我有机会查看了源代码,发现了很多未处理的错误。我相信,如果被调用的类具有更好的异常处理能力,您的解决方案就会起作用。谢谢你的全面回答!谢谢我在启动HSQLDB时遇到了同样的问题。引发了异常,但未显示该异常。我在上面遇到了同样的错误!。我将无效的s传递给hsqldb…………谢谢Brett,我最终使用了antrun插件。我尝试将exec:exec与java main一起使用,因为我需要控制退出代码,当它到达系统时。退出(-1)它会终止构建,即使它应该在子进程中运行。怎么办?
$ mvn clean integration-test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building q2363055
[INFO] task-segment: [clean, integration-test]
[INFO] ------------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/pascal/Projects/stackoverflow/q2363055/target/q2363055-1.0-SNAPSHOT.jar
[INFO] Preparing exec:java
[WARNING] Removing: java from forked lifecycle, to prevent recursive invocation.
[INFO] No goals needed for project - skipping
[INFO] [exec:java {execution: my-exec-java}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An exception occured while executing the Java class. null
A problem occured
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19 seconds
[INFO] Finished at: Tue Mar 02 23:40:32 CET 2010
[INFO] Final Memory: 16M/79M
[INFO] ------------------------------------------------------------------------