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

如何通过Maven资源过滤仅在本地默认Profile包含jks资源

问题根因

当前配置失效的核心原因是:写在<build>全局作用域下的<resources>规则对所有Profile生效,第一个<resource>块没有做Profile维度的条件判断,无论激活哪个环境都会把retruststore.jks复制到输出目录;第二个块配置的*.jks排除规则仅作用于自身的资源扫描范围,不会影响第一个块的包含逻辑。

正确配置方案

核心思路是:将jks证书的资源包含规则从全局配置移到default Profile内部,仅当默认Profile激活时才扫描复制证书文件,全局配置只保留所有环境通用的资源规则。

第一步:调整全局build的资源规则

全局配置只保留所有环境都需要的公共资源,不要包含jks文件:

<build>
    <resources>
        <!-- 公共基础配置,所有环境都需要 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>application.yaml</include>
            </includes>
        </resource>
        <!-- 对应环境的配置文件,开启变量替换 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>application-${active.profile}.yaml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
        </plugin>
    </plugins>
</build>

第二步:在default Profile中追加专属资源规则

仅当default Profile激活时,才将jks证书加入资源扫描范围,注意jks是二进制文件,必须关闭过滤避免文件损坏:

<profiles>
    <profile>
        <id>default</id>
        <properties>
            <active.profile/>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <!-- 仅本地构建生效的专属资源配置 -->
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>false</filtering>
                    <includes>
                        <include>retruststore.jks</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>dev</id>
        <properties>
            <active.profile>dev</active.profile>
        </properties>
    </profile>
    <profile>
        <id>uat</id>
        <properties>
            <active.profile>uat</active.profile>
        </properties>
    </profile>
    <!-- 其余环境Profile保持原有配置不变 -->
</profiles>
验证结果
  • 执行mvn compile或IDE默认构建(激活default Profile):输出目录包含application.yaml、retruststore.jks,符合本地开发使用需求
  • 执行mvn compile -P dev/mvn package -P uat/mvn package -P prod等非默认环境构建命令:输出目录仅包含application.yaml和对应环境的application-{env}.yaml,不会携带jks证书,满足云平台部署规则

注意:jks属于二进制证书文件,绝对不能开启filtering=true的资源过滤,否则Maven会将其作为文本文件替换占位符,直接导致证书损坏无法使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:31:02