Maven не передает аргументы командной строки -D моей цели постобработки архетипа

У меня есть архетип 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

Archetype 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"

Это было удалено из моего отладчика с точкой останова в строке 102 org.apache.maven.shared.invoker.DefaultInvoker.java:

(line 102 --->) int exitCode = executeCommandLine( cli, request );

В моем понимании, 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: generate.

Source Buildtools project base directory [null]

Любые идеи о том, возможно ли это, или я пропустил что-то, что позволит этой передаче свойств системы?

1 ответ

Я считаю, что причина проблем заключается в следующем:

-Dgoals=net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch \
-DbtBasedir=/ccs_home/projects/CCSSC/SC_Inventory

Что происходит, так это то, что "-DbtBasedir" передается в плагин архетипа Maven вместо того, чтобы быть частью более длинной строки -Dgoals"...".

Измените вашу команду следующим образом:

-Dgoals='net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch -DbtBasedir=/ccs_home/projects/CCSSC/SC_Inventory'

Надеюсь, это поможет.

Другие вопросы по тегам