[英]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意味着我無法從相同的源代碼重新創建二進制文件,因為最終將獲取不同版本的依賴關系。
讓我用具體的例子來解釋。
com.my-company:my-awesome-framework:1.0
的原型。 com.my-company:core-lib:1.0
。 mvn archeype:generate my-awesome-framework
。 他填寫了所需的詳細信息,並創建了一個名為service-foo
項目。 service -foo
具有從屬core-lib
和自從。 core-lib
添加了更多功能,並發布了版本2.0
service-foo
仍然使用core-lib
版本1.0
構建。 (因為他沒有改變版本的項目的POM文件。如果我用<version>RELEASE<version>
為“核心-lib的, this time
服務FOO would have built with version
2.0 of the
核心lib`) mvn archetype:generate my-awesome-framework
。 他填寫了必填字段,並創建了一個名為service-bar
。 現在是從core-lib
2.0
版2.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.