Maven构建失败报错java.lang.ExceptionInInitializerError求助
Spring Boot 构建报错:java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTag :: UNKNOWN
问题详情
我在创建Spring Boot应用时,构建项目一直报这个错:
java: java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTag :: UNKNOWN
排查后发现问题出在pom.xml里,已经清理了IntelliJ自动生成的冗余内容,下面是原始和修改后的pom.xml片段,当前用的是JDK 24(MacBook上安装的Java版本也是24)。
原始pom.xml片段
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>app</groupId> <artifactId>VirtualCM</artifactId> <version>0.0.1-SNAPSHOT</version> <name>VirtualCM</name> <description>VirtualCM</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>24</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </path> </annotationProcessorPaths> </configuration> </plugin> <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> </plugins> </build> </project>
修改后pom.xml片段
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>app</groupId> <artifactId>VirtualCM</artifactId> <version>0.0.1-SNAPSHOT</version> <name>VirtualCM</name> <description>VirtualCM</description> <properties> <java.version>24</java.version> <maven.compiler.release>24</maven.compiler.release> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.9.0</version> </plugin> <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> </plugins> </build> </project>
问题分析与修复方案
这个报错核心原因是Maven编译器插件版本过低,不支持JDK 24,加上修改后移除了Lombok的注解处理器配置,进一步触发了编译冲突。
具体修复步骤:
升级Maven Compiler Plugin到支持JDK 24的版本
3.9.0版本不兼容JDK 24,直接升级到3.13.0及以上版本(Spring Boot 3.4.x的parent已经管理了兼容的版本,也可以手动指定)。恢复Lombok注解处理器配置
必须在maven-compiler-plugin里配置annotationProcessorPaths,否则Lombok无法在编译时生成代码,还会和JDK 24的编译逻辑冲突。还原PostgreSQL的runtime scope
把postgresql依赖的<scope>runtime</scope>加回去,这个配置是合理的,只需要在运行时加载驱动。
修复后的关键pom.xml片段
<properties> <java.version>24</java.version> </properties> <dependencies> <!-- 恢复postgresql的runtime scope --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <!-- 其他依赖保持不变 --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <!-- 使用parent管理的版本 --> </path> </annotationProcessorPaths> </configuration> </plugin> <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> </plugins> </build>
后续验证操作
- 执行
mvn clean install清理并重新构建项目 - 检查IntelliJ的Project Structure,确认Project SDK和Module SDK都是JDK 24
- 刷新Maven依赖:右键项目 → Maven → Reload Project
内容的提问来源于stack exchange,提问作者Daniel Quiroga
相关产品推荐
相关产品推荐

