问题
<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>
The above XML snippet is from a POM file in a Java project. In this snippet I've defined the jaxws-maven-plugin to use a wsdl file to generate the SEI code and place it in the src/main/java directory. This plugin is bound to the generate-sources phase, and works fine.
I want to make it so that if I issue the plugin directly, using:
mvn jaxws:wsimport
it should place the files in the above mentioned folder. From the plugins reference site (https://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html), I can't figure out how to pass the parameter (sourceDestDir) as a command line argument. Is there someway I can do this?
回答1:
WARNING /!\
You are trying to generate sources under the source folder src/main/java
. Unless there is a very strong reason, 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, if the plugin does not do it already itself.
To be able to set parameters directly on the command line, the plugin needs to define a user property. However, the org.jvnet.jax-ws-commons:jaxws-maven-plugin
does not define a user property for the sourceDestDir parameter. This is noticeable because the documentation does not have a "User Property" set.
You can also find this in the source code:
@Parameter(defaultValue = "${project.build.directory}/generated-sources/wsimport") private File sourceDestDir;
The @Parameter
annotation, used to declare the parameter of the Maven plugin, does not have a corresponding property.
As such, you will need to have the following:
Define a Maven property
jaxws.sourceDestDir
with a value of${project.basedir}/src/main/java
with<properties> <jaxws.sourceDestDir>${project.basedir}/src/main/java</jaxws.sourceDestDir> </properties>
Preferably, you would have
${project.build.directory}/some/path
instead ofsrc/main/java
.Configure the plugin to use this Maven property:
<configuration> <sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir> </configuration>
If you want to override it, you can now do so directly on the command line with
-Djaxws.sourceDestDir=/my/new/value
. This system property will take precedence over the value of the Maven property.
来源:https://stackoverflow.com/questions/38435221/how-to-pass-parameter-to-maven-plugin-from-cli