我去错误消息:
module reads package javax.annotation from both jsr305 and java.annotation
在我的 build.gradle 中,我使用了这些依赖项:
implementation "javax.annotation:jsr305:1.0" // for @javax.annotation.Nonnull & Nullable
实现 "javax.annotation:javax.annotation-api:1.3.2" // 对于 @javax.annotation.Generate`
在我的 OpenAPI 生成的源代码中使用了这些注释:
@javax.annotation.Nonnull & Nullable
@javax.annotation.Generated
我尝试使用排除但它不起作用:
implementation ('javax.annotation:jsr305:1.0') { exclude group:"javax.annotation", module: "javax.annotation-api" }
解决方案
在源代码中从 javax.annotation 移至 jakarta.annotation:
@jakarta.annotation.Generated
@jakarta.annotation.Nonnull
@jakarta.annotation.Nullable
并在我的 build.gradle 中包含此依赖项:
implementation 'one.gfw:jakarta.annotation-api:2.1.1'
在我的 module-info.java 中我包括:
requires jakarta.annotation;
n.b.我发现的另一个依赖项
"jakarta.annotation:jakarta.annotation-api:1.3.5"
没有我想要的所有注释,只有 @javax.annotation.Generated 而不是 Nonnull 和 Nullable,所以我使用了 'one.gfw:jakarta.annotation-api:2.1.1'
顺便说一句,我的源代码是由 OpenAPI 生成器生成的,我在生成器的配置中包含了选项
"useJakartaEe: 'true'"
来生成“jakarta.annotation”来代替“javax.annotation”。在我的 OpenAPI 生成器项目中(与上述项目分开),这是我在 build.gradle 中的配置:
openApiGenerate {
generatorName = "java"
inputSpec = "${rootDir}/specs/${project.specName}"
outputDir = "${buildDir}/${project.apiName}"
apiPackage = "${project.packageName}.controllers"
modelPackage = "${project.packageName}.models"
configOptions.set([
dateLibrary: "java8",
useJakartaEe: 'true'
])
}
希望这有帮助。