mvn package执行失败,报JCTree$JCImport字段缺失错误求助
问题分析
报错java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tool'的核心原因有两点:
- POM文件存在XML语法错误:
<build><plugins>标签内嵌套了另一个<plugins>,导致Maven无法正确读取你配置的maven-compiler-plugin:3.11.8,实际使用的是Spring Boot父依赖中默认的3.11.0版本,该版本与Java 17的编译器API存在兼容问题。 - Lombok版本与Spring Boot 3.1.3不匹配:你手动指定的Lombok 1.18.30版本,与Spring Boot 3.1.3依赖的Lombok版本(1.18.32)存在差异,可能引发编译期字节码处理冲突。
解决方案
步骤1:修复POM的Plugins嵌套错误
将<build>内嵌套的<plugins>标签删除,把内部的插件直接移到外层<plugins>下。修改后的<build>部分如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.8</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins> </build>
步骤2:对齐Lombok版本与Spring Boot父依赖
删除Lombok依赖中手动指定的<version>标签,让Spring Boot父依赖自动管理兼容版本:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <!-- 移除手动指定的版本,使用父依赖的兼容版本 --> </dependency>
步骤3:清理Maven缓存并重新构建
执行以下命令强制清理缓存、更新依赖并打包:
mvn clean package -U
补充说明
如果上述步骤仍未解决问题,可以尝试将maven-compiler-plugin版本升级到3.12.1(该版本对Java 17的兼容性更好),修改后的插件配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.12.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Dekay
相关产品推荐
相关产品推荐

