Java 21构建Maven项目时出现io/jsonwebtoken非法参数异常
解决Maven构建时的IllegalArgumentException: Invalid descriptor错误
错误信息
java.lang.IllegalArgumentException: Invalid descriptor: [io/jsonwebtoken/JwtBuilder0org/springframework/security/core/AuthenticationgetNameclaimio/jsonwebtoken/securit
问题原因
这个错误是字节码编译或增强过程中出现损坏导致的,结合你的依赖配置,大概率是以下情况之一:
- Spring Boot依赖版本不一致引发的冲突
- Lombok、Spring DevTools等字节码增强工具与JJWT库的兼容性问题
- Maven本地缓存的损坏依赖或编译产物导致的异常
解决步骤
1. 清理Maven缓存并强制更新依赖
先清理项目编译产物和本地仓库缓存,重新构建:
mvn clean install -U
-U参数会强制刷新所有依赖,避免缓存的损坏文件影响构建。
2. 统一Spring Boot所有依赖版本
你的spring-boot-starter-mail指定了3.3.3版本,但其他Spring Boot Starter依赖未指定版本,可能导致版本不一致。添加依赖管理节点统一版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.3.3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
然后删除spring-boot-starter-mail中的<version>标签,让它继承统一版本。
3. 排查字节码增强工具冲突
暂时禁用Spring DevTools和Lombok,验证是否能正常构建:
- 注释掉
spring-boot-devtools依赖 - 注释掉
lombok依赖,同时临时替换代码中的Lombok注解(比如把@Data换成手动编写getter/setter)
如果构建成功,再逐个恢复依赖定位问题。如果是Lombok导致的冲突,显式指定兼容的Lombok版本(Spring Boot 3.3.3推荐用1.18.30+版本):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> <optional>true</optional> </dependency>
4. 确认JDK版本与JJWT兼容
JJWT 0.12.x要求JDK 17及以上,确保项目编译版本符合要求,在pom.xml中添加:
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
内容的提问来源于stack exchange,提问作者sahil2034
相关产品推荐
相关产品推荐

