AspectJ-Maven-Plugin 1.11适配JDK11缺失tools.jar致构建失败如何解决
解决AspectJ Maven插件在JDK11下找不到tools.jar的问题
这个问题我之前帮不少开发者解决过,核心原因是你用的aspectj-maven-plugin:1.11是基于JDK8及以下设计的,默认会去寻找tools.jar,但JDK9+已经把这个文件的内容整合到JDK的模块化系统中(比如jdk.compiler模块),所以旧插件会报错。以下是适配JDK11的最优解决方案:
1. 优先升级插件到支持JDK11的版本
最根本的解决方式是把插件升级到1.12及以上版本(推荐用1.14.0或更高稳定版),这些版本已经适配了JDK9+的模块化结构,不会再依赖tools.jar。同时要搭配支持JDK11的AspectJ核心库版本(比如1.9.x系列)。
具体POM配置示例
替换你原来的插件配置为以下内容:
<properties> <!-- 指定兼容JDK11的AspectJ版本 --> <aspectj.version>1.9.7</aspectj.version> <!-- 确保项目编译环境和JDK11一致 --> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <!-- 升级到支持JDK11的插件版本 --> <version>1.14.0</version> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <!-- 明确指定JDK11的兼容级别 --> <complianceLevel>11</complianceLevel> <source>11</source> <target>11</target> <!-- 如果你有自定义切面库,在这里添加 --> <!-- <aspectLibraries> <aspectLibrary> <groupId>your.group.id</groupId> <artifactId>your-aspect-lib</artifactId> </aspectLibrary> </aspectLibraries> --> </configuration> <dependencies> <!-- 引入匹配版本的AspectJ工具类库 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
2. 验证环境配置
- 确保你的
JAVA_HOME环境变量指向正确的JDK11目录,Maven会自动读取这个路径获取JDK资源。 - 不要手动在POM中添加
com.sun:tools:jar的依赖,这在JDK11中已经不存在,反而会引发冲突。
3. 特殊场景:无法升级插件时的临时方案(不推荐)
如果因为项目限制无法升级插件,可以通过Maven的系统依赖指定JDK11的模块路径,但这种方式比较hack,不建议长期使用:
<dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>11.0.7</version> <scope>system</scope> <!-- 指向JDK11的lib目录下的jrt-fs.jar,模拟tools.jar的功能 --> <systemPath>${java.home}/lib/jrt-fs.jar</systemPath> </dependency>
但还是强烈建议升级插件,这才是长期维护的正确方式。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

