mvn release 插件发布下一个快照不是当前版本
Posted
技术标签:
【中文标题】mvn release 插件发布下一个快照不是当前版本【英文标题】:mvn release plugin releasing next snapshot not current release 【发布时间】:2014-09-29 15:47:10 【问题描述】:您好,我一直在从我的工作站发布一个项目,没有任何问题。我最近尝试从 1.0.0-SNAPSHOT 发布另一个项目。但是,当它实际发布时,它会将 1.0.1-SNAPSHOT 发布到快照存储库,而不是 1.0.0 发布到存储库。 我已经完成了dryRun=true,看起来还不错。事实上,它默认我使用这些版本:
What is the release version for "Appname"? (...) 1.0.0: :
What is SCM release tag or label for "Appname"? (...) Appname-1.0.0: :
What is the new development version for "Appname"? (...) 1.0.1-SNAPSHOT: :
我采用所有默认值。 但是,当我执行“mvn release:perform”时 这就是它的作用:
[INFO] Uploading: http://corporate-nexus-site/snapshots/app-path/1.0.1-SNAPSHOT/fei-logging-formatter-1.0.1-20140929.153303-1.jar
...
[INFO] [INFO] BUILD SUCCESS
我正在使用最新的 maven,并且我手动添加了最新版本的插件。我可以使用相同的父级和 settings.xml 设置发布另一个项目。 在试运行后查看属性文件并准备好一切对我来说都是正确的。 我最初以为我的发行版设置错误,并且正在向快照存储库发布一个版本,但正如您所见,它实际上认为它做得很好并发布了一个快照。
很困惑。
有什么想法可以尝试吗?
谢谢。
更新:在项目中,我将 pom 从 1.0.0-SNAPSHOT 更新到 1.0.0 并进行了“mvn deploy”,它完全符合我在发布中的预期,没有全部当然是好东西。
UPDATE2:Pom(保护有罪的公司名称)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>logging-formatter</groupId>
<artifactId>logging-formatter</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>Logging Formatter</name>
<description>logging tool to format your logging in the standard cn way.</description>
<parent>
<groupId>com.companyname.pom.parent.master</groupId>
<artifactId>cn-pom-parent-master</artifactId>
<version>2014.3.0</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
</build>
<scm>
<url>http://svn.sys.ds.companyname.com/svn/cn-logging</url>
<connection>scm:svn:http://svn.sys.ds.companyname.com/svn/cn-logging</connection>
<developerConnection>scm:svn:http://svn.sys.ds.companyname.com/svn/cn-logging</developerConnection>
</scm>
<organization>
<name>CompanyName Enterprises</name>
</organization>
<ciManagement>
<system>Jenkins</system>
<url>http://jenkins.sys.ds.companyname.com:8080/job/cn-logging-DEVELOP/</url>
</ciManagement>
</project>
UPDATE3:添加父设置信息
SETTINGS.XML
<repositories>
<repository>
<id>fei-releases</id>
<name>Ferguson Release Repository</name>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://companyname/nexus/content/repositories/releases</url>
<layout>default</layout>
</repository>
<repository>
<id>fei-snapshots</id>
<name>Ferguson Snapshot Repository</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<url>http://companyname/nexus/content/repositories/snapshots/</url>
<layout>default</layout>
</repository>
<repository>
<id>fei-thirdparty</id>
<name>Ferguson 3rd Party Repository</name>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://companyname/nexus/content/repositories/thirdparty/</url>
<layout>default</layout>
</repository>
</repositories>
PARENT REPOSITORIES:
<repositories>
<repository>
<id>third-party</id>
<name>3rd Party Repository</name>
<url>http://companyname/nexus/content/repositories/thirdparty/</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories/>
PARENT DISTRIBUTION MANAGEMENT:
<distributionManagement>
<repository>
<id>fei-releases</id>
<name>Ferguson Release Repository</name>
<url>http://companyname/nexus/content/repositories/releases</url>
<layout>default</layout>
</repository>
<snapshotRepository>
<id>fei-snapshots</id>
<name>Ferguson Snapshot Repository</name>
<url>http://companyname/nexus/content/repositories/snapshots</url>
<layout>default</layout>
</snapshotRepository>
</distributionManagement>
【问题讨论】:
你的 SCM 是什么?以及您使用的是什么版本的 mvn-release-plugin? svn,效果很好。 mvn-release = 2.5.1 您是否尝试“降级”到 2.5 版,看看它是否可重现? 您能否详细描述您用于创建发布的步骤? @QhadR 我使用了默认版本,这意味着我没有明确声明任何版本,所以是早期版本并且与我声明 2.5.1 时的结果相同。 【参考方案1】:我做了一个“mvn release:clean release:prepare”然后是一个“mvn 发布:执行“我用来发布另一个项目的相同步骤,没有 使用同一个父级的问题。
所以你有另一个项目在发布后部署良好? (您在 repo 中看到了发布版本)?
如果是这样,这听起来像是您的“有问题”项目中的一个问题。可以分享一下它的 pom.xml 吗?
【讨论】:
没错,其他项目的一切都按预期工作。这就是为什么这很令人困惑。我将分享我的项目 pom。谢谢 我看到了 pom。你的存储库是什么?您是部署到本地仓库,还是有公司仓库(Nexus/Artifactory/等)?您能否在您的父 pom 或 settings.xml 中分享您的“存储库”部分? 是的,在我公司使用 nexus,我将发布相关信息。谢谢。 只是为了确保:settings.xml 对于正常工作的第二个项目是通用的?还有父pom?如果是这样,项目之间的唯一区别是主 pom.xml。对吗? 那是正确的,我在同一台机器上做了,没有做任何事情让它使用不同的设置文件。他们使用相同的父级。以前的项目按预期工作。这个在发布时部署到快照,但在 svn 中创建了一个适当的标签。在部署时,它会按预期发布存储库。我知道它的声音很古怪,我假设我做错了什么或设置有误。但我想不出别的。这周我将尝试第三个项目,看看会发生什么。【参考方案2】:@史蒂夫霍尔特,
我在你的 pom.xml 文件中看到了一个危险信号:
<scm>
<url>http://svn.sys.ds.companyname.com/svn/cn-logging</url>
<connection>scm:svn:http://svn.sys.ds.companyname.com/svn/cn-logging</connection>
<developerConnection>scm:svn:http://svn.sys.ds.companyname.com/svn/cn-logging</developerConnection>
</scm>
这些网址均不包含trunk
、branches
或tags
关键字。
因此,当 Maven 创建发布标签时,它会告诉 SVN 使用与之前相同的 url:
http://svn.sys.ds.companyname.com/svn/cn-logging
当release-prepare
运行时,它会执行
$ svn checkout http://svn.sys.ds.companyname.com/svn/cn-logging/
但它无法将发布标签与开发主干区分开来。
因此,它检索发布后的快照修订版(即最新提交)而不是发布修订版(之前的提交)。
解决方案:
在cn-logging
下创建一个trunk
目录并将所有代码移入其中:
svn/cn-logging/
trunk/
pom.xml
src/
main/
java/
branches/
tags/
希望对您有所帮助。
【讨论】:
以上是关于mvn release 插件发布下一个快照不是当前版本的主要内容,如果未能解决你的问题,请参考以下文章
mvn clean install vs. deploy vs. release
从快照存储库下载 WAR 并使用 mvn 部署到本地 JBoss