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

如何在Maven的process-resources阶段基于资源文件生成${builtinLocales}变量?

实现方案:Maven构建时生成内置语言列表变量

可以通过Maven Antrun插件结合Ant的文件处理能力实现需求,在process-resources阶段自动扫描资源文件并生成目标变量,具体步骤如下:

1. 在pom.xml中配置Antrun插件

绑定插件到process-resources阶段,编写Ant任务完成文件扫描、提取和属性设置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>generate-builtin-locales</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <!-- 扫描resources目录下匹配labels_*.properties的文件 -->
                            <fileset id="localeFiles" dir="${project.basedir}/src/main/resources">
                                <include name="labels_*.properties"/>
                            </fileset>

                            <!-- 提取语言标识(如en、de)并拼接成分号分隔的字符串 -->
                            <pathconvert property="builtinLocales" pathsep=";">
                                <map from="${project.basedir}/src/main/resources/labels_" to=""/>
                                <map from=".properties" to=""/>
                                <fileset refid="localeFiles"/>
                            </pathconvert>

                            <!-- 如果需要提取完整前缀(如labels_en、labels_de),替换上面的pathconvert为以下配置 -->
                            <!--
                            <pathconvert property="builtinLocales" pathsep=";">
                                <map from="${project.basedir}/src/main/resources/" to=""/>
                                <map from=".properties" to=""/>
                                <fileset refid="localeFiles"/>
                            </pathconvert>
                            -->

                            <!-- 将属性传递给Maven -->
                            <property name="maven.builtinLocales" value="${builtinLocales}"/>
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 启用资源过滤,让配置文件能引用生成的属性 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <configuration>
                <filtering>true</filtering>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <!-- 只对需要替换属性的配置文件开启过滤,避免影响其他资源 -->
                        <includes>
                            <include>application.properties</include>
                        </includes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                        <excludes>
                            <exclude>application.properties</exclude>
                        </excludes>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 在配置文件中引用生成的属性

比如在src/main/resources/application.properties中添加:

# 可用语言列表
app.available.locales=${builtinLocales}

3. 验证效果

执行mvn process-resources后,查看target/classes/application.properties,会发现app.available.locales已经被替换为扫描到的语言列表(如en;de或labels_en;labels_de)。

关键说明

  • Ant的pathconvert任务负责将文件路径转换为目标字符串,通过map规则去掉不需要的前缀和后缀。
  • 启用资源过滤时,建议只对需要替换属性的文件开启,防止其他资源文件(如图片、静态文件)被意外修改。
  • 插件版本可以根据自己的Maven环境调整,确保兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:20:39