首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven scm不听绝对触发输出。

maven scm不听绝对触发输出。
EN

Stack Overflow用户
提问于 2014-10-30 23:22:49
回答 1查看 258关注 0票数 1

你好,Maven / Perforce专家,

我试图为一个使用Perforce作为VCS的项目实现maven工件的自动版本控制。这让我选择了maven-scm插件和maven发布插件来实现我的目标。我们强制使用触发器,用于检查每次提交的xml内容中是否有违规行为。

代码语言:javascript
复制
    checkstyle_xml change-content //depot/project/....xml " /p4/triggers/checkstyle-trigger.pl %user% %changelist% /p4"

不幸的是,当我运行命令“mvn -X -e -B scm: update -versions:checkin”来编辑文件、更新版本和提交强制命令时,maven并不尊重perforce触发器的结果,并导致构建失败。但是,正如您所看到的,更改最终被提交给了强制执行。

使用已启用触发器的XML进行堆栈跟踪

代码语言:javascript
复制
[DEBUG] Sending changelist:
Change: new

Description:
    Auto increment pom version during build process. Reviewed by: RE

Files:
    //depot/project/pom.xml

[ERROR] Provider message:
[ERROR] Unable to submit
[ERROR] Command output:
[ERROR] Debug: starting trigger script  
Change 351157 submitted.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.112s
[INFO] Finished at: Thu Oct 30 14:51:51 PDT 2014
[INFO] Final Memory: 23M/219M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-scm-plugin:1.7:checkin (default-cli) on project phoenix: Command failed.Unable to submit -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal     org.apache.maven.plugins:maven-scm-plugin:1.7:checkin (default-cli) on project phoenix: Command failed.Unable to submit
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Command failed.Unable to submit
    at org.apache.maven.scm.plugin.AbstractScmMojo.checkResult(AbstractScmMojo.java:439)
    at org.apache.maven.scm.plugin.CheckinMojo.execute(CheckinMojo.java:83)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我在本地提交了该文件,以确保perforce触发器不会吐出失败状态代码,而且它实际上也返回成功。我不知道为什么maven不尊重强制触发。

代码语言:javascript
复制
p4 –u testuser submit -d "Test" pom.xml 
Submitting change 351166.
Locking 1 files ...
edit //depot/project/pom.xml#25
Debug: starting trigger script  
Change 351166 submitted.

$ echo $?
0

我测试了一个没有启用强制触发器的txt文件的场景,并且maven将生成结果作为成功返回,因为从技术上讲,它不会通过强制触发器

使用没有触发器的TXT堆栈跟踪

代码语言:javascript
复制
[DEBUG] Sending changelist:
Change: new

Description:
    Auto increment pom version during build process. Reviewed by: RE

Files:
    //depot/phoenix/auto-increment-pom/pom.txt

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.998s
[INFO] Finished at: Thu Oct 30 14:55:04 PDT 2014
[INFO] Final Memory: 18M/216M
[INFO] ------------------------------------------------------------------------

问题:

  1. 有人经历过maven的这种行为吗?您是如何解决的?
  2. 您知道是否有可能禁用特定文件的强制触发器,这样perforce甚至不会通过触发器。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 14:40:41

您可以在触发器表中使用排除语法( path字段中的前导连字符)来指定某些文件或模式不运行触发器。

在“p4触发器”文档中有一个这样的例子:triggers.html

注意这个语法,它有点过激:

  1. 根据触发器名称和类型对触发器进行分组。
  2. 组的触发器表中行的顺序。

还有一篇关于此特性的知识库文章,将进一步详细介绍:Article/Excluded-Trigger-Paths-Not-Being-Recognized

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26665127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档