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

如何让注解处理器生成的文件支持Maven资源过滤替换版本变量

解决注解处理器生成文件的Maven版本变量替换问题

我之前也碰到过类似的场景,注解处理器生成的文件没法直接用Maven默认的资源过滤,得稍微调整下配置,下面是具体的实现步骤:

1. 配置maven-resources-plugin处理生成的文件目录

首先,你需要让Maven的资源插件去处理注解处理器生成文件所在的目录。通常注解处理器会把生成的文件放到target/generated-sources/annotations或者自定义目录里,你可以在pom.xml的build/plugins里添加如下配置:

<build>
    <finalName>prodity-commons-spigot</finalName>
    <sourceDirectory>src/main/java</sourceDirectory>
    <!-- 保留你原有的其他配置 -->
    <plugins>
        <!-- 配置资源插件处理生成目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>process-generated-resources</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <!-- 输出到编译后的类目录,确保最终能打进JAR -->
                        <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                        <resources>
                            <resource>
                                <!-- 替换成你注解处理器实际生成文件的目录 -->
                                <directory>${project.build.directory}/generated-sources/annotations</directory>
                                <!-- 开启变量过滤替换 -->
                                <filtering>true</filtering>
                                <!-- 指定要处理的文件类型,按需调整 -->
                                <includes>
                                    <include>*.*</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 保留你原有的其他插件配置 -->
    </plugins>
</build>

这里的核心要点:

  • 指定phase为process-classes,确保在注解处理器生成文件之后执行替换操作
  • 开启<filtering>true</filtering>来启用Maven的变量替换机制
  • 源目录必须和你注解处理器生成文件的实际路径一致,如果生成到target/generated-resources这类目录,直接修改即可

2. 可选:将生成目录添加为Maven资源目录

如果你的注解处理器生成的是纯资源文件(而非Java源文件),可以把生成目录直接加入到Maven的资源目录列表中,让默认的资源处理流程覆盖它:

<build>
    <!-- 保留你原有的其他配置 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <!-- 添加生成目录作为资源目录 -->
        <resource>
            <directory>${project.build.directory}/generated-sources/annotations</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

这种方式要注意执行顺序,确保Maven处理资源时,注解处理器已经生成了目标文件。

3. 验证替换效果

配置完成后,执行mvn clean package命令,然后打开编译后的JAR包,查看目标文件里的${project.version}是否已经被替换成了项目的实际版本号。

另外要注意:只要注解处理器生成的文件里是直接写入${project.version}字符串,Maven的过滤机制就能自动识别并替换,不需要修改注解处理器的代码逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:42:55