簡體   English   中英

在同一目錄中使用Maven Archetype Generate

[英]Using Maven Archetype Generate in the same Directory

有沒有辦法運行mvn archetype:生成並定位當前目錄而不是從artifactId創建目錄? 該插件應該采用一個basedir參數,但傳入“-Dbasedir =”。 沒有辦法。

對於其他上下文,我有2個Git存儲庫設置。 第一個包含用於生成自定義Web服務的Maven原型的源,第二個是從原型生成的示例服務。 我有一個Jenkins工作,通過運行“mvn clean install”來構建我的原型。 我正在嘗試設置第二個Jenkins作業,作為CI工作流的一部分,使用“mvn archetype:generate”生成測試服務,使用mvn clean install構建服務,旋轉服務,運行一些集成測試,然后推送如果測試通過,測試服務的源代碼到第二個存儲庫。 兩個Jenkins作業都使用Maven 2/3構建作業類型 ,並且我在作業配置的SCM部分中指定了我們的Git repo信息,因此作業首先執行“git clone”。

對於第二項工作,我當前的工作流程如下所示:

// Clean out the existing source and commit locally.
git rm -r . 
git commit -m "Cleaning out previous version." .

// Generate the new source from the archetype.
mvn archetype:generate ...

// Big hack that I'd like to remove.
mv <artifactId>/* .
rm -rf <artifactId>

// Add the new generated source and commit locally.
git add -A .
git commit -m "Committing new version." .

// Build and test.
mvn integration-test

// Assuming that passed, commit the changes.
git push origin master

黑客是因為我不知道如何告訴archetype插件使用我當前的目錄而不是創建一個帶有artifactId名稱的嵌套目錄,所以我必須將所有內容移回我的本地存儲庫根目錄並刪除創建的目錄。 不是世界末日,但感覺很難看。 請注意,除了我最初的問題的答案之外,我願意接受有關如何更好地實現我的總體目標的建議。 :) 提前致謝!

沒有某種解決方法是不可能的,因為有兩個原因:

  1. basedir屬性不起作用,請參閱此問題

  2. archetype插件總是將artifactId添加為最后一個子目錄。 你可以在消息來源中看到這一點。

你的選擇

  • 保持你的黑客,它不是那么可怕;-)

  • 項目是否在存儲庫的根目錄中是否重要? 如果不是在構建/集成測試之前做cd <artifactId>

  • 如果需要從存儲庫的根目錄構建,那么使用pom類型的root pom.xml,將生成的項目作為子模塊(我認為這是其他帖子建議的#3)

  • 提供一個PR來為maven archetype插件添加所需的功能,這可能需要一些時間,但可能是最干凈的解決方案

我有三個想法:

  1. 您可以嘗試使用basedir的絕對路徑,但我認為Maven在看到pom.xml文件時會覆蓋該屬性。

  2. 在運行mvn archetype:generate之前,使用腳本並pushd ..更改為父文件夾。 popd會讓你回來。

  3. 使用maven模塊構建。 這樣,你有一個構建原型的根POM,你可以運行mvn archetype:generate來生成項目內的模塊:

      demo-project/ pom.xml archetype/ pom.xml 

我知道這是一個古老的話題,但我有類似的問題:

原型:generate goal有一個參數outputDirectory,你可以將它設置為根文件夾(../)。 從原型生成工件時,您的工件名稱與當前目錄相同很重要。

mvn archetype:generate -DarchetypeGroupId=[archetype-group] -DarchetypeArtifactId=[archetype-id] -DoutputDirectory=../ -DartifactId=[current-folder-name] -DgroupId=[whatever-you-want] -Dversion=[ex: 0.1] -Dpackage=[jar|pom|etc.] -B

我沒有評論的聲譽所以我將不得不做出回答。 在腳本中包含這些行並不是一個好主意:

mv <artifactId>/* .
rm -rf <artifactId>

如果有人決定填寫一個空的(或只是'/')artifactId,你最終會嘗試將整個磁盤移動到這個目錄中,然后才刪除整個磁盤。 相反,你可以這樣做:

mv ./<artifactId>/* .
rmdir ./<artifactId>

移動不會受到傷害,rmdir只能刪除空目錄。

暫無
暫無

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

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