GMavenPlus增量编译(检测无变更)功能失效问题咨询
GMavenPlus 全量编译问题排查与解决
GMavenPlus 本身支持增量编译,你遇到的无变更全量编译问题大概率是配置细节或执行逻辑冲突导致的,以下是具体排查和调整方案:
1. 显式开启GMavenPlus增量编译开关
虽然GMavenPlus默认启用增量编译,但显式配置可以避免潜在的默认值异常。在GMavenPlus的<configuration>中添加:
<incremental>true</incremental>
2. 调整编译插件执行顺序与职责
当前配置中,maven-compiler-plugin和GMavenPlus的编译阶段可能存在冲突,建议统一由GMavenPlus处理混合代码(它支持编译Java),避免双重编译触发全量构建:
<!-- 禁用maven-compiler-plugin的默认编译执行 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <useIncrementalCompilation>true</useIncrementalCompilation> <source>17</source> <target>17</target> </configuration> <executions> <execution> <id>default-compile</id> <phase>none</phase> </execution> <execution> <id>default-testCompile</id> <phase>none</phase> </execution> </executions> </plugin> <!-- 调整GMavenPlus的执行阶段,确保覆盖编译和测试编译 --> <plugin> <groupId>org.codehaus.gmavenplus</groupId> <artifactId>gmavenplus-plugin</artifactId> <version>4.0.1</version> <configuration> <targetBytecode>17</targetBytecode> <incremental>true</incremental> <jvmArgs> <jvmArg>--add-opens</jvmArg> <jvmArg>java.base/java.lang=ALL-UNNAMED</jvmArg> </jvmArgs> </configuration> <executions> <execution> <id>groovy-main-compile</id> <phase>compile</phase> <goals> <goal>addSources</goal> <goal>compile</goal> </goals> </execution> <execution> <id>groovy-test-compile</id> <phase>test-compile</phase> <goals> <goal>addTestSources</goal> <goal>compileTests</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.apache.groovy</groupId> <artifactId>groovy</artifactId> <version>4.0.22</version> <scope>runtime</scope> </dependency> </dependencies> </plugin>
3. 排查触发全量编译的外部因素
如果调整配置后仍有问题,检查以下场景:
- 执行过
mvn clean:会清空target目录,强制触发全量编译 - Groovy/GMavenPlus版本变更:版本更新会重置增量编译缓存
- 依赖或classpath变更:新增/修改依赖会导致全量编译
- 编译参数变更:比如
targetBytecode、编码等配置修改
4. 临时关闭并行编译测试
日志显示Parallel parsing enabled,并行编译可能干扰增量编译的状态判定,尝试关闭并行编译验证:
<configuration> <!-- ...其他配置 --> <parallelParsing>false</parallelParsing> </configuration>
验证方法
修改单个Groovy/Java文件后执行mvn compile,观察日志中Compiled X files的数值。如果是增量编译,X应为修改的文件数量而非全部4159。同时可以检查target/gmavenplus/incremental-compile目录,该目录存储增量编译的状态缓存,若目录为空则说明增量编译未正常启用。
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

