如何在pom.xml中配置环境特定变量动态切换wsdlFile取值
问题场景
使用jaxws-maven-plugin生成SOAP服务客户端代码时,WSDL文件按环境分别存放在以下路径:
src/main/resources/wsdl/dev:开发环境WSDL文件src/main/resources/wsdl/prod:生产环境WSDL文件
项目已配置对应环境的配置文件application-dev.properties、application-prod.properties,需要根据当前激活的环境,动态替换插件配置中<wsdlFile>、<wsdlDirectory>标签内的${app.env}占位符,当前插件配置如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>2.6</version> <configuration> <wsdlDirectory>${project.basedir}/src/main/resources/wsdl/${app.env}</wsdlDirectory> <packageName>com.example.jwt.jwtdemo.dto.cmsapi</packageName> <wsdlFiles> <wsdlFile>${project.basedir}/src/main/resources/${app.env}/wsdl/MyLoginService_1.wsdl</wsdlFile> <wsdlFile>${project.basedir}/src/main/resources/${app.env}/wsdl/MyService_1.wsdl</wsdlFile> </wsdlFiles> <sourceDestDir> ${project.basedir}/src/main/java </sourceDestDir> </configuration> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> </plugin>
实现方法
注意:jaxws-maven-plugin是构建阶段执行的Maven插件,无法直接读取Spring Boot运行时的application-*.properties配置,需要通过Maven Profile机制传递环境参数,步骤如下:
- 在pom.xml中定义Maven环境Profile,给
app.env属性赋值
在pom.xml的<project>节点下添加profiles配置,默认激活开发环境:
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <app.env>dev</app.env> </properties> </profile> <profile> <id>prod</id> <properties> <app.env>prod</app.env> </properties> </profile> </profiles>
- 修正插件配置的路径问题
当前配置里wsdlDirectory已经指定了WSDL所在的目录,wsdlFile不需要再写全路径,直接写文件名即可,避免路径重复拼接;另外不建议把生成的代码放到src/main/java手写源码目录,改到Maven默认的生成源码目录即可,插件会自动将该目录加入编译路径,避免生成代码被误提交到版本库。修正后的插件配置如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>2.6</version> <configuration> <wsdlDirectory>${project.basedir}/src/main/resources/wsdl/${app.env}</wsdlDirectory> <packageName>com.example.jwt.jwtdemo.dto.cmsapi</packageName> <wsdlFiles> <wsdlFile>MyLoginService_1.wsdl</wsdlFile> <wsdlFile>MyService_1.wsdl</wsdlFile> </wsdlFiles> <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> </configuration> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> </plugin>
- 构建时指定环境即可
构建时通过-P参数指定激活的Maven Profile,插件会自动替换${app.env}占位符,读取对应目录下的WSDL文件生成代码:
- 开发环境构建:
mvn clean package(默认激活dev profile,无需额外传参) - 生产环境构建:
mvn clean package -Pprod
内容的提问来源于stack exchange,提问作者yrazlik
相关产品推荐
相关产品推荐

