我正在嘗試創建一個方法,在其中仍然依靠項目中的SNAPSHOT依賴關係實現密封構建。創建密封Maven構建
例如而言,說我有具有依賴結構這樣一個項目:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
我想要做的是解決所有快照依賴本地的東西這是關係到我的目前的版本,然後將這些版本部署到我的Nexus發佈版本中。並非所有的這些依賴都是內部的,所以我不能簡單地在每個依賴上進行發佈。
因此,在此示例中,other-1.2-SNAPSHOT
會變成類似於other-1.2-mine-1.2.3
和thing-3.1-SNAPSHOT
將變爲thing-3.1-mine-1.2.3
。這在約60條蟒蛇線中相對微不足道。
但是,問題在於將可傳遞的SNAPSHOT解析爲具體的版本。所以我也需要將gizmo-6.1.3-SNAPSHOT
轉換爲gizmo-6.1.3-mine.1.2.3
並且thing-3.1-mine-1.2.3
依賴於它。
這只是一個實現我想要的方法的例子。我的目標是在一兩年的時間裏,我可以檢查我的發行版本1.2.3版本,並且能夠運行mvn clean package
或類似的東西,而不用擔心解決長久以來SNAPSHOT的依賴關係。
這個分支是可編譯的,而不僅僅是使用類似彙編插件的jar-and-dependencies
功能保留所有依賴關係是很重要的。我希望能夠修改源文件並進行其他版本構建(例如應用修補程序)。
所以,
- 有這樣可用,將能夠快照依賴轉換以遞歸的方式是具體什麼?
- 有沒有可以爲你管理這種事情的插件?發佈插件已承諾在其
branch
目標上提供一些配置選項,但它無法解決我想要的程度的外部代碼。 - 是否有其他技術可用於創建密封Maven構建?
聽起來像一個反Maven破解我。在Maven中,基本的基本規則之一是** Convention Over Configuration **。如果依賴是由你自己創建的,你應該自己管理/使用SNAPSHOT/RELEASE版本。如果他們來自其他地方,則應始終使用最新版本(而不是SNAPSHOT版本)。再來看看[Maven The Complete Reference - 3.3.1節](http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-syntax.html#pom-reationships -sect版本),並瞭解爲什麼SNAPSHOT在Maven中使用。 – yorkw
我非常全面地瞭解Maven的基礎知識。然而,我生活在現實世界中,期限和第三方庫非常有用,但它們在SNAPSHOT版本上的使用時間很長。 Jason Van Zyl,你可能知道,甚至承認圍繞版本發佈過程繁重系統的想法是一個巨大的錯誤(並且隨特斯拉而改變)。對於我們所消費的所有項目來說,維持內部分配的作用不大,我所做的實際上是比大多數人更好的跳躍。 –
甚至在現實世界中也應該考慮到一些原因。你在這裏與系統作戰。正如你所提到的,快照不夠長 - 即使你使用時間戳快照來依靠工件解析。我的方法是使用依賴和部署插件來檢索所有工件,並通過使用腳本或一些自制的Maven插件將已知的快照依賴關係部署到自己的Maven倉庫中。也許與其他小玩意交談也有幫助:如果他們可以發佈他們的工件的測試版本,你可以依靠那些沒有太多雜亂的東西。 – wemu