You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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机制传递环境参数,步骤如下:

  1. 在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>
  1. 修正插件配置的路径问题
    当前配置里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>
  1. 构建时指定环境即可
    构建时通过-P参数指定激活的Maven Profile,插件会自动替换${app.env}占位符,读取对应目录下的WSDL文件生成代码:
  • 开发环境构建:mvn clean package(默认激活dev profile,无需额外传参)
  • 生产环境构建:mvn clean package -Pprod

内容的提问来源于stack exchange,提问作者yrazlik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:21:37