【问题标题】:Using Maven and Apache CXF code-gen with different endpoints in testing and production在测试和生产中使用具有不同端点的 Maven 和 Apache CXF 代码生成
【发布时间】:2013-03-02 15:22:42
【问题描述】:

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

我有一个用于开发的服务的测试版本和一个生产版本。 这 2 个服务的端点位于不同的 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>

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

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

有什么想法吗?谢谢。

【问题讨论】:

    标签: web-services maven code-generation cxf wsdl2java


    【解决方案1】:

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

    mvn goal -Dws_status=your_status_value
    

    应该没问题。

    【讨论】:

    • 谢谢,好提示!这将产生预期的效果。但是......我实际上是在寻找一个使用 Maven 的构建配置文件来实现这一点的示例。
    • 问题在于,要激活您的配置文件,您必须使用“-P profileName”调用命令行,这类似于使用 -Dproperty=value。
    • 绝对。但是我在想,如果测试和生产之间存在任何其他差异,那么实现不同的构建配置文件来解决这个问题并查看示例会很有用。在这种情况下,只需更改单个属性,您提供的解决方案就足够了。
    • 我认为我真正想要的是了解 Maven 的“构建配置文件”的概念,但我发现文档令人困惑。真的,我正在钓鱼举个例子。也许我应该去 RTFM!
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多