Java14微服务项目mvn编译common模块报maven-compiler-plugin 3.8.1错误
问题1:maven-compiler-plugin:3.8.1的版本来源
你当前项目继承了org.springframework.boot:spring-boot-starter-parent:2.4.12,Spring Boot官方在父依赖管理中已经默认锁定了maven-compiler-plugin的版本为3.8.1,哪怕你没有在pom中显式声明该插件,也会自动继承这个版本。
你之前配置的是spring-boot-maven-plugin,和maven-compiler-plugin是两个完全独立的Maven插件:前者用于将Spring Boot项目打包为可执行jar/war,后者负责Java代码的编译工作,所以你配置前者不会对编译插件的版本和行为产生任何影响,这也是你认为“已完成配置但仍有问题”的核心原因。
问题2:报错的根因与解决方案
报错本质是你使用的Lombok 1.18.18对Java 14的模块访问限制兼容不足,Lombok的注解处理器需要访问JDK内部的javac处理类,但Java 9之后引入的模块系统默认禁止了外部代码对JDK内部类的访问。
建议按优先级选择以下解决方案:
- 方案一:升级Lombok版本
直接将所有pom中定义的lombok.version修改为1.18.20及以上版本,该版本开始已经原生适配了Java 14的模块访问规则,无需额外配置即可解决问题。推荐优先选择该方案,改动最小兼容性最好。 - 方案二:给编译插件添加开放模块参数
如果你不想升级Lombok版本,可在根pom的build/plugins节点下显式声明maven-compiler-plugin的配置,添加模块开放参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <compilerArgs> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
该配置会主动将JDK内部的javac处理包开放给未命名模块,允许Lombok访问。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

