0

我有一个使用 Web 服务的 Java Web 项目,使用 Apache CXF 根据服务发布的 WSDL 生成底层代码。

我有一个用于开发的服务的测试版本和一个生产版本。这两个服务的端点位于不同的 URL 上,虽然它们的公共接口几乎相同,但我在将项目推广到生产环境时重新生成了 CXF 代码(使用 cxf-codegen-plugin)。

配置 Maven 以执行此操作的最佳方法是什么?

目前我在被pom.xml调用中设置了一个属性ws_status

<properties>
    <ws_status>test</ws_status>
</properties>

我随后用它来调整 codegen 插件使用的 WSDL 文件的路径:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <configuration>
    <fork>once</fork>
    <encoding>UTF-8</encoding>
    <additionalJvmArgs>-Djava.endorsed.dirs=${project.build.directory}/endorsed</additionalJvmArgs>
    <!-- rest of the normal codegen configuration options -->
    </configuration>
    <dependencies>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>2.2</version>
    </dependency>
    </dependencies>
    <executions>
    <execution>
        <id>generate-sources</id>
        <phase>generate-sources</phase>
        <goals>
        <goal>wsdl2java</goal>
        </goals>
        <configuration>
        <wsdlOptions>
            <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/${ws_status}/Cmis.wsdl</wsdl>
            <wsdlLocation>classpath:wsdl/${ws_status}/Cmis.wsdl</wsdlLocation>
            <extraargs>
                <extraarg>-client</extraarg>
                <extraarg>-verbose</extraarg>
                <extraarg>-compile</extraarg>
            </extraargs>
            </wsdlOption>
        </wsdlOptions>
        </configuration>
    </execution>
    </executions>
</plugin>

这工作正常,但让我很恼火的是,每次发布生产版本时我都需要更改ws_status内部,因为 pom 文件由 git 跟踪。pom.xml

我想要的是一个 Maven 命令行开关,告诉它引用一个 WSDL 文件或另一个,这样我就可以为测试或生产环境生成源代码,而无需更改项目内的代码。这是 Maven 中的“构建配置文件”吗?

有任何想法吗?谢谢。

4

1 回答 1

0

您应该删除 POM 顶部的属性。您可以按如下方式调用 Maven 命令行:

mvn goal -Dws_status=your_status_value

它应该没问题。

于 2013-03-14T10:31:39.587 回答