【发布时间】: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