如何从 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
。
因此,您需要具备以下条件:
定义一个 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
。
配置插件以使用此 Maven 属性:
<configuration>
<sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir>
</configuration>
如果你想覆盖它,你现在可以直接在命令行上使用 -Djaxws.sourceDestDir=/my/new/value
。此系统 属性 将优先于 Maven 属性.
的值
<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
。
因此,您需要具备以下条件:
定义一个 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
。配置插件以使用此 Maven 属性:
<configuration> <sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir> </configuration>
如果你想覆盖它,你现在可以直接在命令行上使用
-Djaxws.sourceDestDir=/my/new/value
。此系统 属性 将优先于 Maven 属性. 的值