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>

这些网址均不包含trunkbranchestags 关键字。

因此,当 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 快照不起作用

mvn clean install vs. deploy vs. release

maven发布插件挂起

从快照存储库下载 WAR 并使用 mvn 部署到本地 JBoss

gradle-release 插件 + maven 发布插件

Maven 发布插件 - 准备创建快照版本而不是发布版本的标签