<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)作为命令行参数传递。有什么事我能做到吗?
答案 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
。
因此,您需要具备以下条件:
使用
定义值为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
。
配置插件以使用此Maven属性:
<configuration>
<sourceDestDir>${jaxws.sourceDestDir}</sourceDestDir>
</configuration>
如果要覆盖它,现在可以使用-Djaxws.sourceDestDir=/my/new/value
直接在命令行上执行此操作。此系统属性将优先于Maven属性的值。