模块读取javax.annotation包冲突问题求助
解决模块包冲突:module reads package javax.annotation from both jsr305 and java.annotation
错误原因
- Java模块系统(JPMS)禁止同一个包被多个模块提供。
javax.annotation:jsr305:1.0(自动模块,模块名jsr305)与javax.annotation:javax.annotation-api:1.3.2(显式模块,模块名javax.annotation)都包含javax.annotation包,触发冲突。 - 你之前的
exclude配置无效,因为javax.annotation-api是直接声明的依赖,而非jsr305的传递依赖,exclude仅能移除依赖的传递依赖,无法处理直接依赖的冲突。
解决方案
方案1:调整依赖范围(推荐)
@Nonnull、@Nullable属于编译时注解,无需在运行时类路径存在;@Generated通常也仅在编译阶段被工具使用。将依赖设置为compileOnly可避免同时出现在模块路径中:
修改build.gradle:
compileOnly "javax.annotation:jsr305:1.0" // 编译阶段用@Nonnull、@Nullable compileOnly "javax.annotation:javax.annotation-api:1.3.2" // 编译阶段用@Generated
若运行时确实需要javax.annotation-api(如框架扫描@Generated),仅保留它的implementation范围:
compileOnly "javax.annotation:jsr305:1.0" implementation "javax.annotation:javax.annotation-api:1.3.2"
方案2:禁用Java模块系统(临时方案)
通过禁用JPMS的模块路径推断绕过冲突,但不推荐长期使用:
java { modularity.inferModulePath = false }
方案3:替换为单一依赖(彻底解决)
使用com.google.code.findbugs:jsr305:3.0.2包含@Nonnull、@Nullable,同时用Java 9+自带的javax.annotation.processing.Generated替换javax.annotation.Generated,完全移除javax.annotation-api:
依赖配置:
implementation "com.google.code.findbugs:jsr305:3.0.2"
源码中修改注解:
@javax.annotation.processing.Generated
内容的提问来源于stack exchange,提问作者David Miller
相关产品推荐
相关产品推荐

