簡體   English   中英

從原型創建項目時如何固定Maven工件的最新版本

[英]How to pin latest version of a maven artifact while creating a project from archetype

我有一個原型,可以用來創建新項目。 在項目創建時(例如,當某人執行mvn archetype:generate ),我想將某些依賴項固定到當時可用的RELEASE版本(我強烈反對將<version>RELEASE</version>放在POM文件中)。

有沒有一種方法可以使原型解決RELEASE版本並將其固定到某些庫中。

我現在解決此問題的唯一方法是,每次發布一些核心庫時都發布新版本的原型,然后在archetype-resources/pom.xml進行硬編碼版本

我確實看到了幾個類似的問題,但是這些解決方案對我來說都沒有。

正如我已經提到的,我想固定從原型創建項目時可用的最新發行版。 使用`RELEASE意味着我無法從相同的源代碼重新創建二進制文件,因為最終將獲取不同版本的依賴關系。

讓我用具體的例子來解釋。

  • 我有一個Maven坐標com.my-company:my-awesome-framework:1.0的原型。
  • 我有一個帶有maven坐標com.my-company:core-lib:1.0
  • Developer-1運行命令mvn archeype:generate my-awesome-framework 他填寫了所需的詳細信息,並創建了一個名為service-foo項目。 service -foo具有從屬core-lib和自從。
  • 我們向core-lib添加了更多功能,並發布了版本2.0
  • Developer-1 build service-foo仍然使用core-lib版本1.0構建。 (因為他沒有改變版本的項目的POM文件。如果我用<version>RELEASE<version>為“核心-lib的, this time服務FOO would have built with version 2.0 of the核心lib`)
  • Devloper-2運行mvn archetype:generate my-awesome-framework 他填寫了必填字段,並創建了一個名為service-bar 現在是從core-lib 2.02.0 請注意,我沒有修改my-awesome-archetype以更新archetype-resources\\pom.xml core-lib版本

我希望這可以弄清楚我的用例

我使用archetype-post-generate.groovy腳本解決了這個問題。 Maven原型插件在創建項目后執行(如果可用)。 那里可以使用Maven版本插件來更新到最新版本。

這是一個示例,您可以如何同時更新屬性和父項目中的兩個版本(在本例中為Spring Boot):

dir = new File(new File(request.outputDirectory), request.artifactId)

def run(String cmd) {
    def process = cmd.execute(null, dir)
    process.waitForProcessOutput((Appendable)System.out, System.err)
    if (process.exitValue() != 0) {
        throw new Exception("Command '$cmd' exited with code: ${process.exitValue()}")
    }
}

run("echo 'Updating to latest Vaadin version...'")
run("mvn versions:update-properties")

run("echo 'Updating to latest Spring Boot version...'")
run("mvn versions:update-parent")

缺點是Eclipse似乎不執行該腳本,但是在其他主要的IDE和命令行中,此工作就可以了。

groovy腳本構成了我在GitHub中的Vaadin + Spring Boot原型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM