我有一个使用 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 中的“构建配置文件”吗?
有任何想法吗?谢谢。