Maven 删除pom中项目版本的快照

Maven 删除pom中项目版本的快照,maven,maven-3,pom.xml,maven-release-plugin,versions-maven-plugin,Maven,Maven 3,Pom.xml,Maven Release Plugin,Versions Maven Plugin,我有一个pom和以下GAV <groupId>com.company.services</groupId> <artifactId>test-branch-2</artifactId> <version>1.0.21-SNAPSHOT</version> com.company.services 测试分支-2 1.0.21-快照 我想在批处理模式下使用maven从中删除-SNAPSHOT,这样我就可以用Jenkins完成

我有一个pom和以下GAV

<groupId>com.company.services</groupId>
<artifactId>test-branch-2</artifactId>
<version>1.0.21-SNAPSHOT</version>
com.company.services
测试分支-2
1.0.21-快照
我想在批处理模式下使用maven从中删除
-SNAPSHOT
,这样我就可以用Jenkins完成,而不必手动指定任何内容

我已经查看了version:set的文档,但所有选项都提供了一个交互式提示,并要求我键入版本的名称


我更喜欢versions插件,而不是release插件。

如果你真的不想使用Maven release插件(无论出于什么原因),下面是我如何成功地以标准方式(即没有脚本,没有自定义Maven插件)从Maven POM中删除快照后缀(hanbdled作为分类器)

鉴于以下情况:

<profile>
    <id>drop-snapshot</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.11</version>
                <executions>
                    <execution>
                        <id>parse-version</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>parse-version</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <id>set-version</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>set</goal>
                        </goals>
                        <configuration>
                            <newVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</newVersion>
                        </configuration>
                    </execution>
                    <execution>
                        <id>upgrade-pom</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>commit</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

删除快照
org.codehaus.mojo
目标,将解析POM的当前版本,并将其设置在一组属性中,默认情况下,
parsedVersion
作为前缀,
majorVersion
minorVersion
incrementalVersion
作为后缀(查看文档,您还将拥有
分类器
构建编号
)。因此,在它执行之后,我们可以在POM中使用像
${parsedVersion.majorVersion}
这样的属性
  • 然后,
    versions maven插件
    ,目标,将使用这些属性来构建您真正想要的新版本(在本例中,删除快照,因为我们排除了
    ${parsedVersion.classifier}
    属性)
  • 最后,
    版本maven插件
    ,目标,将使这些更改生效

  • 将以下内容添加到您的POM中:

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.11</version>
                <configuration>
                    <name>newVersion</name>
                    <value>${project.version}</value>
                    <regex>-SNAPSHOT</regex>
                    <failIfNoMatch>false</failIfNoMatch>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>
    
    -N
    告诉Maven仅在POM中定义了模块的情况下处理根项目。这不是严格必需的,但是可以防止
    构建帮助程序
    插件针对子模块不必要地运行。
    versions
    插件在任何情况下都只在根项目上运行,并自动遍历所有模块。考虑使用<代码> ReCaseMealEclipse的/<代码>规则> Maven执行器< /代码>插件,确保多模块项目正确处理。
    您可以运行
    mvn versions:commit
    删除由
    versions:set
    生成的备份POM。或者,您可以将
    false
    添加到
    versions
    插件的配置中。

    类似于A_Di-Matteo使用
    build helper
    的方法,但不需要额外的插件配置:

     mvn build-helper:parse-version versions:set \
         -DnewVersion=\${parsedVersion.majorVersion} \
             .\${parsedVersion.minorVersion} \
             .\${parsedVersion.incrementalVersion \
             .\${parsedVersion.buildNumber} \
          versions:commit
    

    这将在
    pom.xml

    中用
    1.0.0.0
    替换
    1.0.0-SNAPSHOT
    ,因为版本2.10的Maven插件可以简单地执行以下操作:

    mvn versions:set -DremoveSnapshot
    

    mvn版本:set-DnewVersion=1.0.21
    应该能做到,不是吗?是的,但不是。你是如何得到字符串“1.0.21”而不减少pom的“ed”或“cat”或“grep”的?啊,我明白了。看一看,Michael Hüttermann描述了一个Maven插件,它删除了-SNAPSHOT并相应地设置了versions插件的newVersion属性。我现在使用的是发布插件,而且必须是Maven?您可以通过帮助插件-mvn help:evaluate-Dexpression=project.version获得该版本,但是您需要一些sed的帮助或删除“SNAPSHOT”后缀的东西。当然,你也可以直接grep这个版本。谢谢这个,这是最简单的解决方案@jeanMarcAssin这不是公认的答案吗?适用于插件版本2.5。不适用于插件版本2.2。不知道在两者之间。2.5版是本文撰写时的最新版本。很好!非常感谢。如果您使用版本控制,那么就不要使用那个愚蠢的穷人的备份机制:
    mvn versions:set-DremoveSnapshot-DgenerateBackupPoms=false
    @JuanRamos
    mvn versions:set -DremoveSnapshot