Maven 删除pom中项目版本的快照
我有一个pom和以下GAVMaven 删除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完成
<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