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

How to pass parameter to Maven plugin from CLI?

<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 目录中。此插件绑定到生成源阶段,并且工作正常。

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

mvn jaxws:wsimport

它应该将文件放在上面提到的文件夹中。从插件参考站点 (https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html),我不知道如何将参数 (sourceDestDir) 作为命令行参数传递。我有办法做到这一点吗?

警告 /!\

您正在尝试在源文件夹 src/main/java 下生成源。除非有 非常 充分的理由,don't do this. All generated content should always be placed under the build directory (target by default) and not be version-controlled. You can always add the generated sources as source folder using the build-helper-maven-plugin:add-source,如果插件本身没有这样做。


为了能够直接在命令行上设置参数,插件需要定义一个用户属性。但是,org.jvnet.jax-ws-commons:jaxws-maven-plugin 没有为 sourceDestDir 参数定义用户 属性。这很明显,因为文档没有设置 "User Property"。

你也可以找到这个in the source code:

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

@Parameter注解,用于声明Maven插件的参数,没有对应的property

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

  1. 定义一个 Maven 属性 jaxws.sourceDestDir 的值为 ${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 属性.

  4. 的值