繁体   English   中英

复制具有版本更改的Maven pom.xml

[英]Copy Maven pom.xml with version change

抱歉,很长的帖子,但我首先必须解释一下我们的设置:

设定

我们生产了一些核心 jar,这些jar在实际发布的多个其他项目中使用。 现在,我们的许多项目都将Ant与Ivy一起使用。 实际上,所有核心项目严格来说都是与常春藤合作的蚂蚁。

  • 在我们的ivy.xml文件中,版本号是一个属性。 此属性是通用设置的,因为开发人员在我们使用新版本时并未更新此属性。 这使我们所有的项目(包括核心 jar)保持相同的版本号。
  • 我们将罐子发布为Maven罐子。 我们通过Ivy <ivy:makepom>任务执行此操作。 使用此任务时,版本号将自动替换为属性。
  • 我们也像Maven一样将此pom.xml嵌入到jar中。
  • 我们还创建了另一个名为pom-snapshot.xml POM。 这与pom.xml相同,但是在版本号之后带有-SNAPSHOT

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

当开发人员对jar感到满意时,他们可以将该jar提升到我们的Maven Release存储库。 本品采用詹金斯促进插件,在pom.xml ,和mvn deploy:deploy-file

我们想要什么

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

马上:

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

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

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

总是有maven-exec-plugin,您几乎可以执行任何操作。 但是我认为这不是一个好主意。 由于Maven始终遵循约定,因此您最好考虑转向使用Maven的便捷过程。 在开发阶段使用SNAPSHOT版本,并准备/执行发行版以将SNAPSHOT版本转换为发行版。 在这里检查maven-release-plugin它可以执行版本更新,VCS更新等。

我发现了maven-version-plugin可以满足我的需求。 我将pom.xml复制到新目录,在该pom.xml上运行versions:set ,然后将pom.xml移至pom-snapshot.xml并将pom.xml.versionsBackup移至pom.xml

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM