6
<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)作为命令传递行论据。有什么办法可以做到这一点吗?

4

1 回答 1

10

警告 /!\

您正在尝试在源文件夹下生成源src/main/java。除非有非常充分的理由,否则不要这样做。所有生成的内容都应始终放在构建目录下(target默认情况下),并且不受版本控制。build-helper-maven-plugin:add-source如果插件本身还没有这样做,您始终可以使用 将生成的源添加为源文件夹。


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

您还可以在源代码中找到它:

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

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

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

  1. jaxws.sourceDestDir定义一个值为${project.basedir}/src/main/javawith的 Maven 属性

    <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 属性的值。

于 2016-07-18T11:45:06.157 回答