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

buildTools-archetype-Resources原型运行良好。Maven确实是按照预期调用触摸插件后处理的目标。但是,Maven不做的是沿-dbtbasedir System属性(该问题的系统属性)传递到该分叉的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:dsworkspacesbt-converter-test

您在原型生成阶段所看到的,Maven将所有系统属性设置为属性,包括BTBasedir系统属性。

我正在使用Maven 3.1.1。我调试了Maven-ArcheType-Plugin v2.2源代码,并且可以看到Maven Arpetype Commandline System属性未转移到运行后处理目标的分叉Maven JVM。

这是用于调用后处理目标的命令行的值:

cmd.exe /X /C "C:dsds_envtoolsapache-maven-3.1.1binmvn.bat -B net.jpmchase.cma.cmadev:buildtools-converter-plugin:1.0-SNAPSHOT:touch"

这是从我的调试器中直接取出的,其中有org.apache.maven.shared.invoker.invoker.defaultinvoker.java的第102行上的断点:

(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:dsworkspacesbt-converter-test]
[INFO] Source Buildtools project base directory [null]

您可以看到,BTBASEDASEIR并未从MVN原型中携带:生成命令行。

Source Buildtools project base directory [null]

关于这是否可能或我错过了允许这种系统属性传输的一些想法?

我相信导致问题的原因如下:

-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'

希望会有所帮助。

相关内容

  • 没有找到相关文章

最新更新