問題なく動作する v2.2 Maven アーキタイプがあり、それが完了したら、ファイル システムにドロップするプロジェクトに対して後処理を実行したいと考えています。これを実現するには、次のように -Dgoals コマンドライン オプションを使用します。
mvn archetype:generate \
-DarchetypeGroupId=net.jpmchase.cma.cmadev \
-DarchetypeArtifactId=buildtools-archetype-resources \
-DarchetypeVersion=1.0-SNAPSHOT \
-DarchetypeCatalog=local \
-DgroupId=net.jpmchase.cma.cmadev \
-DartifactId=bt-converter-test \
-Dpackage=net.jpmchase.cma.cmadev \
-Dgoals=net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch \
-DbtBasedir=/ccs_home/projects/CCSSC/SC_Inventory
buildtools-archetype-resources アーキタイプは正常に動作します。実際、Maven はタッチ プラグインの後処理の目標を期待どおりに呼び出しています。ただし、maven が行っていないのは、-DbtBasedir システム プロパティ (そのシステム プロパティのどれも) を、その後処理の目標を実行するために呼び出すフォークされた jvm に渡すことです。
アーキタイプ生成フェーズからの出力は次のとおりです。
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: buildtools-archetype-resources:1.0-SNAPSHOT
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.jpmchase.cma.cmadev
[INFO] Parameter: artifactId, Value: bt-converter-test
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: net.jpmchase.cma.cmadev
[INFO] Parameter: packageInPathFormat, Value: net/jpmchase/cma/cmadev
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: net.jpmchase.cma.cmadev
[INFO] Parameter: groupId, Value: net.jpmchase.cma.cmadev
[INFO] Parameter: btBasedir, Value: /ccs_home/projects/CCSSC/SC_Inventory
[INFO] Parameter: artifactId, Value: bt-converter-test
[INFO] project created from Archetype in dir: C:\ds\workspaces\bt-converter-test
アーキタイプの生成段階でわかるように、Maven は btBasedir システム プロパティを含むすべてのシステム プロパティ セットアップをプロパティとして取得しています。
私はMaven 3.1.1を使用しています。maven-archetype-plugin v2.2 ソース コードをデバッグしたところ、maven archetype コマンドラインのシステム プロパティが、後処理ゴールを実行するフォークされた maven jvm に転送されていないことがわかります。
後処理の目標を呼び出すために使用されるビルドされるコマンドラインの値は次のとおりです。
cmd.exe /X /C "C:\ds\ds_env\tools\apache-maven-3.1.1\bin\mvn.bat -B net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch"
これは、org.apache.maven.shared.invoker.DefaultInvoker.java の 102 行目のブレークポイントを使用して、デバッガーから直接取り出したものです。
(line 102 --->) int exitCode = executeCommandLine( cli, request );
私の touch Mojo には、btBasedir プロパティを受け入れるためのプライベート メンバー変数があります。
/**
* The Buildtools btBasedir.
*/
@Parameter
private String btBasedir;
メソッドの開始時にexecute()
、btBasedir プロパティの値をダンプします。
public void execute() throws MojoExecutionException {
getLog().info("Starting Buildtools to Maven project migration......");
try {
getLog().info("New Maven project base directory [" + project.getBasedir() + "]");
getLog().info("Source Buildtools project base directory [" + btBasedir + "]");
.
.
.
これによるコンソール出力は次のようになります。
[INFO] Invoking post-archetype-generation goals: net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building bt-converter-test 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- buildtools-converter-plugin:1.0-SNAPSHOT:touch (default-cli) @ bt-converter-test ---
[INFO] Starting Buildtools to Maven project migration......
[INFO] New Maven project base directory [C:\ds\workspaces\bt-converter-test]
[INFO] Source Buildtools project base directory [null]
ご覧のとおり、btBasedir は mvn archetype:generate コマンドラインから引き継がれていません。
Source Buildtools project base directory [null]
これが可能かどうか、またはこのシステム プロパティの転送を可能にする何かを逃したかどうかについてのアイデアはありますか?