如何从CLI传递参数到Maven插件?

时间:2016-07-18 11:11:08

标签: java maven jaxws-maven-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.3</version>

            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <id>generate-sei</id>

                    <configuration>
                        <sourceDestDir>${project.basedir}/src/main/java</sourceDestDir>
                    </configuration>
                </execution>
            </executions>
          <dependencies>...</dependencies>
        </plugin>
    </plugins>
</build>

上面的XML片段来自Java项目中的POM文件。在这个片段中,我定义了jaxws-maven-plugin,使用wsdl文件生成SEI代码并将其放在src / main / java目录中。这个插件绑定到generate-sources阶段,并且工作正常。

我想这样做,如果我直接发出插件,使用:

mvn jaxws:wsimport

它应该将文件放在上面提到的文件夹中。从插件引用站点(https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html),我无法弄清楚如何将参数(sourceDestDir)作为命令行参数传递。有什么事我能做到吗?

1 个答案:

答案 0 :(得分:3)

警告/!\

您正尝试在源文件夹src/main/java下生成来源。除非有非常强有力的理由,don't do this。所有生成的内容应始终放在构建目录(默认为target)下,而不是版本控制。您始终可以使用build-helper-maven-plugin:add-source将生成的源添加为源文件夹,如果插件本身没有这样做的话。

为了能够直接在命令行上设置参数,插件需要定义用户属性。但是,org.jvnet.jax-ws-commons:jaxws-maven-plugin未定义sourceDestDir参数的用户属性。这是显而易见的,因为文档没有&#34;用户属性&#34;集。

您还可以找到此in the source code

@Parameter(defaultValue = "${project.build.directory}/generated-sources/wsimport")
private File sourceDestDir;

用于声明Maven插件参数的@Parameter注释没有相应的property

因此,您需要具备以下条件:

  1. 使用

    定义值为jaxws.sourceDestDir的Maven属性${project.basedir}/src/main/java
    <properties>
      <jaxws.sourceDestDir>${project.basedir}/src/main/java</jaxws.sourceDestDir>
    </properties>
    

    最好是${project.build.directory}/some/path代替src/main/java

  2. 配置插件以使用此Maven属性:

    <configuration>
      <sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir>
    </configuration>
    
  3. 如果要覆盖它,现在可以使用-Djaxws.sourceDestDir=/my/new/value直接在命令行上执行此操作。此系统属性将优先于Maven属性的值。