当使用Jenkins Maven发布插件时,如果在反应堆项目列表中没有快照项目,则会出现“您在反应堆项目列表中没有快照项目”的提示。

127

我正在使用SVN、Maven 3.0.3和最新版本的Jenkins以及Maven Release插件。我想要通过Maven Release插件(通过Jenkins)进行干运行,并执行以下选项...

Executing Maven:  -B -f /scratch/jenkins/workspace/myproject/myproject/pom.xml -DdevelopmentVersion=53.0.0-SNAPSHOT -DreleaseVersion=52.0.0 -Dusername=***** -Dpassword=********* -DskipTests -P prod -Dresume=false -DdryRun=true release:prepare

但是干运行出现以下错误...

[JENKINS] Archiving /scratch/jenkins/workspace/myproject/myproject/pom.xml to /home/evotext/hudson_home/jobs/myproject/modules/org.mainco.subco$myproject/builds/2013-11-18_16-09-14/archive/org.mainco.subco/myproject/52.0.0/myproject-52.0.0.pom
Waiting for Jenkins to finish collecting data
mavenExecutionResult exceptions not empty
message : Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project myproject: You don't have a SNAPSHOT project in the reactor projects list.
cause : You don't have a SNAPSHOT project in the reactor projects list.
    Stack trace : 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal  org.apache.maven.plugins:maven-release-plugin:2.0:prepare (default-cli) on project myproject: You don't have a SNAPSHOT project in the reactor projects list.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
    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.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:117)
    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.launchStandard(Launcher.java:329)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
    at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:178)
    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 hudson.maven.Maven3Builder.call(Maven3Builder.java:129)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:67)
    at hudson.remoting.UserRequest.perform(UserRequest.java:118)
    at hudson.remoting.UserRequest.perform(UserRequest.java:48)
    at hudson.remoting.Request$2.run(Request.java:326)
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.maven.plugin.MojoFailureException: You don't have a SNAPSHOT project in the reactor projects list.
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:219)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:181)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 30 more
Caused by: org.apache.maven.shared.release.ReleaseFailureException: You don't have a SNAPSHOT project in the reactor projects list.
    at org.apache.maven.shared.release.phase.CheckPomPhase.execute(CheckPomPhase.java:111)
    at org.apache.maven.shared.release.phase.CheckPomPhase.simulate(CheckPomPhase.java:123)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:199)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:140)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:103)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:211)
    ... 33 more

我的SVN签出方法设置为“始终签出新副本”,我的快照版本存储在快照仓库中,但不在发布仓库中。有没有办法让“反应堆项目列表”查看我的快照仓库? 编辑: 我包含了POM的片段,该项目从父项目继承其版本号。
    <parent>
            <artifactId>subco</artifactId>
            <groupId>org.mainco.subco</groupId>
            <version>52.0.0</version>
    </parent>

2
你的 pom.xml 文件中是哪个 version 版本? - MariuszS
也许这可以帮助 https://dev59.com/5mYr5IYBdhLWcg3wpLr9 - MariuszS
4个回答

185

您正在尝试发布一个不是快照的构件。这意味着您的构件版本号类似于3.0.3。该版本号意味着它已经发布过了。您不能再次发布一个已发布的版本。它们之间没有任何更改,因此没有必要。

您应该只发布SNAPSHOT版本。这意味着您的版本号将类似于3.0.3-SNAPSHOT。


1
我添加了如何获取版本号的信息,即通过从父POM继承它。可惜的是,如果我更改版本以包含“-SNAPSHOT”,则会出现错误:“无法执行目标org.apache.maven.plugins:maven-release-plugin:2.0:prepare(默认CLI)项目myproject上:由于非发布依赖项无法发布项目 ” - Dave
@Dave 我觉得你也需要将父级对象设置为快照。 - Daniel Kaplan
我可能需要在Stack Overflow上再开一个问题,但是父POM确实有一个SNAPSHOT版本,尽管它是“53.0.0-SNAPSHOT”(而不是我想要继承的52.0.0-SNAPSHOT)。你是指更改父POM中的版本吗? - Dave
1
我认为错误信息不够自解释,除非你知道“反应堆项目列表”的含义。感谢您非常清晰的答案。 - user1026870
14
如果他们能添加一个像“你不能发布一个已经发布的版本”的提示信息,那么理解起来会容易得多。但现在出现的提示信息是“在反应堆项目列表中没有SNAPSHOT项目。”...有谁能按照预期正确地解释这个信息呢? - seba.wagner
为什么插件不能忽略那些不是快照的模块呢?也许有一个开关可以控制吗?显然,这些模块已经发布了,因此忽略它们不应该有任何问题。 - Ilya Sazonov

9

Jenkins工作空间未清理或pom.xml中存在FINAL版本。Jenkins具有用于清理工作区的检出策略。

更多信息:Maven发布插件-SNAPSHOT项目需要

检出策略选项:

  • 通过首先删除未提交版本控制的文件/被忽略的文件以及svn:ignore忽略的文件/目录来模拟干净的检出,然后执行svn update
  • 始终检出新副本
  • 尽可能使用svn update,在更新之前使用svn revert

“Jenkins有清理工作区的选项”是什么意思?这些选项在哪里?你是指Jenkins的工作区清理插件吗? - Dave
检出策略选项 - MariuszS
1
对我来说,清除Jenkins工作区后它就可以工作了。 - rbhawsar

2
将项目的POM文件从之前构建的代码库升级到新版本。

1.0.1-SNAPSHOT<version>1.0.1-SNAPSHOT</version>


0

将检出策略更改为“通过首先删除未版本化的文件/被忽略的文件,然后进行svn更新来模拟干净的检出”对我很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接