簡體   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