maven-archetype-plugin と archetype-catalog.xml 生成場所/読み取り場所
(注: 文中に記載の localRepository
設定有無、というのは間違った条件かも知れません(検証中))
問題
mvn archetype:generate -DarchetypeCatalog=local
コマンドを実行したところ、次のようなメッセージが出力され、 archetype-catalog.xml
を認識できていないような感じでしたので原因を調べてみました。
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
Your filter doesn't match any archetype (hint: enter to return to initial list)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :
調査内容
使用した Maven のバージョンは、現時点での最新バージョンである 3.5.2
です。
自作の maven-archetype-java-quickstart を用い、次の 3 パターンを試しました。
- plugin を明示しない -
master
ブランチ - plugin 最新バージョン
3.0.1
を明示する -feature/test-maven-archetype-plugin
ブランチ - plugin
2.4
バージョンを明示する - 上のfeature/test-maven-archetype-plugin
を書き換え
また、 settings.xml
での localRepository
設定の有無でも結果が変わりましたのでそれらをまとめます。
調査結果
まず、 mvn archetype:update-local-catalog
コマンドで archetype-catalog.xml
が生成される場所です。
plugin未設定 | 2.4 | 3.0.1 | |
---|---|---|---|
localRepository設定無し | ~/.m2/ | ~/.m2/ | ~/.m2/repository/ |
localRepository設定有り | {localRepository}/ | ~/.m2/ | {localRepository}/ |
plugin を明示しない場合、一貫していません。
次に、 mvn archetype:generate -DarchetypeCatalog=local
コマンド実行時にどの場所にある archetype-catalog.xml
を読んでいるのかを調べました。
localRepository設定無し | ~/.m2/ |
localRepository設定有り | {localRepository}/ |
まとめ
localRepository
設定を行ってない場合、~/.m2/archetype-catalog.xml
を読みに行こうとするので3.0.1
を使用したプロジェクトを読み取れない。localRepository
設定を行っている場合、{localRepository}/archetype-catalog.xml
を読みに行こうとするので2.4
を使用したプロジェクトを読み取れない。
という結果になりました。
localRepository
設定有無で archetype-catalog.xml
を読み取る場所に一貫性が無い、というのが根本原因だと思われますが、結果的には、 maven-archetype-plugin
を明示していない(私のプロジェクトのような)場合問題が起きない、ということになります。