模块从 jsr305 和 java.annotation 读取包 javax.annotation

问题描述 投票:0回答:1

我去错误消息:

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" }

java annotations java-platform-module-system
1个回答
0
投票

解决方案

在源代码中从 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'
])
}

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.