使用版本更改复制Maven pom.xml

时间:2014-12-15 21:37:55

标签: maven jenkins pom.xml

很抱歉这篇长篇文章,但我首先要解释一下我们的设置:

设置

我们生产了一些核心罐子,这些罐子用于实际发布的多个其他项目中。现在,我们的许多项目都使用Ant和Ivy。实际上,所有的核心项目都是严格使用Ivy的Ant。

  • 在我们的ivy.xml文件中,版本号是属性。此属性是普遍设置的,因为开发人员在我们转到新版本时没有更新此属性。这使我们的所有项目(包括核心 jar)保持在相同的版本号上。
  • 我们以Maven罐子的形式发布我们的罐子。我们通过常春藤<ivy:makepom>任务完成此操作。使用此任务时,版本号将自动替换属性。
  • 我们还将这个pom.xml嵌入我们的罐子中,就像Maven一样。
  • 我们还创建了第二个名为pom-snapshot.xml的POM。这与pom.xml相同,但在版本号后面有-SNAPSHOT

当Jenkins进行构建时,它会自动将jar部署到我们的Snapshot存储库。它使用mvn deploy:deploy-filepom-snapshot.xml文件。这允许开发人员在正式发布之前尝试jar。

当开发人员对jar满意时,他们可以将该jar提升到我们的Maven Release存储库。这使用了Jenkins 推广插件,pom.xmlmvn deploy:deploy-file

我们想要什么

我们现在有一些核心 jar项目正在转移到Maven。开发人员希望保持相同的系统:每个构建都对我们的Maven仓库进行SNAPSHOT部署,然后开发人员可以通过Jenkins插件将选定的构建部署到我们的Maven仓库。

现在:

  • 我复制pom.xml目录下的target并使用mvn deploy:deploy-file将jar部署到我们的Release repo中。这是由开发人员使用Jenkins中的 Promote 插件而不是每个版本完成的。
  • 我还将pom.xml复制到pom-snapshot.xml mvn deploy:deploy-file`下的target. I use文件,以便在每次构建后将其部署到Snapshot存储库。

这有效,但我使用正则表达式查找pom.xml的版本号,如果我有pom.xml,其中Super Pom版本(父POM)与版本相同在pom.xml中,我最终更改了错误的版本。

我想知道是否有一个Maven插件允许您在更改pom本身的版本号时将pom.xml复制到另一个目录。或者,有没有更好的方法来处理这整个问题?我可以将Artifactory设置为不检查我正在部署的内容与pom.xml之间的版本一致性,但最终给我们提供了OSGI项目的问题以及开发人员没有跟上版本号的问题。

2 个答案:

答案 0 :(得分:0)

总有maven-exec-plugin,几乎可以做任何事情。但我认为这不是一个好主意。由于Maven总是关于约定,你应该更好地考虑转向maven方便的过程。在开发阶段使用SNAPSHOT版本并发布 - 准备/执行将SNAPSHOT版本转换为第一版。 检查maven-release-plugin here它可以执行版本更新,VCS更新等等。

答案 1 :(得分:0)

我找到maven-version-plugin来获得我需要的东西。我将pom.xml复制到新目录,在versions:set上运行pom.xml,然后将pom.xml移至pom-snapshot.xml,将pom.xml.versionsBackup移至{{ 1}}。

所有这些都在我们的父项目pom.xml中,它设置当前版本号,Java默认值,站点默认值等,因此单个项目&#39; pom.xml文件仍然干净简单。一切都在后台发生。

我对设置不满意,但它与我们的其他项目及其流程兼容,开发人员不必担心任何设置。