Web services 在测试和生产中使用具有不同端点的Maven和ApacheCxf code gen

Web services 在测试和生产中使用具有不同端点的Maven和ApacheCxf code gen,web-services,maven,code-generation,cxf,wsdl2java,Web Services,Maven,Code Generation,Cxf,Wsdl2java,我有一个Java web项目,它使用web服务,使用ApacheCXF根据服务发布的WSDL生成底层代码 我有一个用于开发的服务的测试版本和一个生产版本。 这两个服务的端点位于不同的URL,虽然它们的公共接口几乎相同,但在将项目升级到生产环境时,我会重新生成CXF代码(使用CXF codegen插件) 配置Maven来实现这一点的最佳方法是什么 目前,我在pom.xml中设置了一个名为ws\u status <properties> <ws_status>test

我有一个Java web项目,它使用web服务,使用ApacheCXF根据服务发布的WSDL生成底层代码

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

配置Maven来实现这一点的最佳方法是什么

目前,我在
pom.xml
中设置了一个名为
ws\u 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>

org.apache.cxf
cxf-codegen插件
${cxf.version}
一旦
UTF-8
-Djava.annocated.dirs=${project.build.directory}/annocated
com.sun.xml.bind
jaxb impl
2.2
com.sun.xml.bind
jaxbxjc
2.2
生成源
生成源
wsdl2java
${basedir}/src/main/resources/wsdl/${ws_status}/Cmis.wsdl
类路径:wsdl/${ws_status}/Cmis.wsdl
-客户
-冗长的
-编撰
这工作正常,但每次发布生产版本时,我都需要更改
pom.xml
中的
ws\u状态,这让我很恼火,因为pom文件是由git跟踪的

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


有什么想法吗?谢谢。

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

mvn goal -Dws_status=your_status_value

应该没问题。

谢谢,好提示!这将产生预期的效果。但是实际上,我正在寻找一个使用Maven的构建配置文件来实现这一点的示例。问题是,要激活您的配置文件,您必须使用“-P profileName”调用您的命令行,这类似于使用-Dproperty=value。但我认为,如果测试和生产之间存在任何其他差异,那么实现不同的构建概要文件来解释这一点并查看一个示例将是非常有用的。在这种情况下,只要更改一个属性,您提供的解决方案就足够了。我想我真正想了解的是Maven的“构建概要文件”的概念,但我发现文档很混乱。我想举个例子,真的。也许我应该去RTFM!