很抱歉这篇长篇文章,但我首先要解释一下我们的设置:
我们生产了一些核心罐子,这些罐子用于实际发布的多个其他项目中。现在,我们的许多项目都使用Ant和Ivy。实际上,所有的核心项目都是严格使用Ivy的Ant。
ivy.xml
文件中,版本号是属性。此属性是普遍设置的,因为开发人员在我们转到新版本时没有更新此属性。这使我们的所有项目(包括核心 jar)保持在相同的版本号上。<ivy:makepom>
任务完成此操作。使用此任务时,版本号将自动替换属性。pom.xml
嵌入我们的罐子中,就像Maven一样。pom-snapshot.xml
的POM。这与pom.xml
相同,但在版本号后面有-SNAPSHOT
。当Jenkins进行构建时,它会自动将jar部署到我们的Snapshot存储库。它使用mvn deploy:deploy-file
和pom-snapshot.xml
文件。这允许开发人员在正式发布之前尝试jar。
当开发人员对jar满意时,他们可以将该jar提升到我们的Maven Release存储库。这使用了Jenkins 推广插件,pom.xml
和mvn 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项目的问题以及开发人员没有跟上版本号的问题。
答案 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文件仍然干净简单。一切都在后台发生。
我对设置不满意,但它与我们的其他项目及其流程兼容,开发人员不必担心任何设置。