使用Error Prone创建.refaster规则时遇RefasterRuleCompiler插件未找到问题
解决RefasterRuleCompiler插件找不到的问题
检查依赖配置的正确性
- 确保
error_prone_refaster依赖的scope为compile,且版本与Error Prone Core完全匹配,示例配置:
<dependency> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_refaster</artifactId> <version>2.24.0</version> <!-- 和Error Prone Core版本保持一致 --> <scope>compile</scope> </dependency>
- 不要遗漏
error_prone_core依赖,Refaster规则编译必须依赖它:
<dependency> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_core</artifactId> <version>2.24.0</version> <scope>provided</scope> </dependency>
确认Maven Compiler插件配置细节
- 确保compiler插件明确配置了Error Prone的注解处理器路径,且Refaster相关依赖已加入,示例配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <!-- 使用支持JDK17的插件版本 --> <configuration> <release>17</release> <annotationProcessorPaths> <path> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_refaster</artifactId> <version>2.24.0</version> </path> <path> <groupId>com.google.errorprone</groupId> <artifactId>error_prone_core</artifactId> <version>2.24.0</version> </path> </annotationProcessorPaths> <compilerArgs> <arg>-XDcompilePolicy=simple</arg> <arg>-Xplugin:ErrorProne</arg> <!-- JDK17必需的模块开放参数 --> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
- 注意:不要仅将注解处理器放在普通
<dependencies>中,必须通过annotationProcessorPaths声明,否则Maven无法识别Refaster的编译处理器。
清理Maven缓存并重建
- 执行命令强制更新依赖并清理缓存,避免依赖损坏或版本冲突:
mvn clean install -U
- 若问题仍存在,手动删除本地仓库中
com.google.errorprone目录,再重新拉取依赖。
验证JDK17环境与模块配置
- 执行
mvn -version确认Maven使用的JDK版本为17,避免系统多JDK版本导致环境不一致。 - 检查
.mvn/jvm.config中的模块开放参数是否完整,至少包含:
--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
检查Refaster规则类编写规范
- 确保规则类正确使用
@RefasterRule注解,且代码无语法错误,示例:
import com.google.errorprone.refaster.Refaster; import com.google.errorprone.refaster.RefasterRule; @RefasterRule public class MyRefasterRules { public String trimString(String s) { return Refaster.anyOf( s.trim(), s.strip() ); } }
内容的提问来源于stack exchange,提问作者Alexandru Borza
相关产品推荐
相关产品推荐

