带有java库的Gradle平台依赖项
我们有两个公共库,它们使用java库Gradle插件,并通过平台依赖于Micronaut的BOM来依赖Micronaut。两个项目都使用Gradle 6.6.1,这是撰写本文时的最新版本 库带有java库的Gradle平台依赖项,java,gradle,micronaut,maven-bom,Java,Gradle,Micronaut,Maven Bom,我们有两个公共库,它们使用java库Gradle插件,并通过平台依赖于Micronaut的BOM来依赖Micronaut。两个项目都使用Gradle 6.6.1,这是撰写本文时的最新版本 库build.gradle plugins { id "java-library" } repositories { mavenLocal() mavenCentral() } dependencies { annotationProcessor (
build.gradle
plugins {
id "java-library"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
annotationProcessor (
platform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject-java"
)
implementation(
platform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject"
)
testAnnotationProcessor(
enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject-java"
)
testImplementation(
enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-runtime",
"io.micronaut:micronaut-http-server-netty",
"io.micronaut:micronaut-http-client"
)
}
plugins {
id "application"
id "java"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation(
"my.group:library:${libraryVersion}",
platform("io.micronaut:micronaut-bom:${micronautVersion}"),
"io.micronaut:micronaut-http-client",
"io.micronaut:micronaut-http-server-netty",
"io.micronaut:micronaut-inject",
"io.micronaut:micronaut-management",
"io.micronaut:micronaut-runtime",
"io.micronaut:micronaut-validation"
)
}
当我尝试在应用程序中使用我的库时,它使用应用程序Gradle插件,并且对Micronaut的BOM表具有平台依赖性,我收到一个错误,说它无法解析库使用的Micronaut BOM表。但它永远无法解决这种依赖关系,因为它是一个BOM表,而不是一个库
应用程序build.gradle
plugins {
id "java-library"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
annotationProcessor (
platform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject-java"
)
implementation(
platform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject"
)
testAnnotationProcessor(
enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-inject-java"
)
testImplementation(
enforcedPlatform("io.micronaut:micronaut-bom:$micronautVersion"),
"io.micronaut:micronaut-runtime",
"io.micronaut:micronaut-http-server-netty",
"io.micronaut:micronaut-http-client"
)
}
plugins {
id "application"
id "java"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation(
"my.group:library:${libraryVersion}",
platform("io.micronaut:micronaut-bom:${micronautVersion}"),
"io.micronaut:micronaut-http-client",
"io.micronaut:micronaut-http-server-netty",
"io.micronaut:micronaut-inject",
"io.micronaut:micronaut-management",
"io.micronaut:micronaut-runtime",
"io.micronaut:micronaut-validation"
)
}
然后我得到以下错误
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve io.micronaut:micronaut-bom:2.0.1.
Required by:
project : > my.group:library:11.0.0-SNAPSHOT
Caused by: org.gradle.internal.component.NoMatchingConfigurationSelectionException: No matching variant of io.micronaut:micronaut-bom:2.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 14, packaged as a jar, and its dependencies declared externally but:
- Variant 'apiElements' capability io.micronaut:micronaut-bom:2.0.1:
- Incompatible because this component declares an API of a platform and the consumer needed a runtime of a library
- Other compatible attributes:
- Doesn't say anything about how its dependencies are found (required its dependencies declared externally)
- Doesn't say anything about its target Java version (required compatibility with Java 14)
- Doesn't say anything about its elements (required them packaged as a jar)
我试图阅读Gradle文档中关于变体选择的内容,但这对我来说真的没有多大意义。有人知道我需要如何声明依赖项才能实现这一点吗?这似乎是一件非常琐碎的事情,但我没有发现任何关于这方面的东西…看看`实现(enforcedPlatform(“io.micronaut:micronaut bom:$micronautVersion”))是否在主项目中起作用。我尝试了
enforcedPlatform
,但这似乎没有任何区别。我认为它只是允许您覆盖BOM提供的库的一个版本。@npskirk您能解决这个问题吗?我最终解决了症状而不是根本原因。类似这样:实现(“org.elasticsearch.client:elasticsearch rest高级客户端:${elasticsearchVersion}”){force=true,因为“Micronaut 2 BOM引入了与运行6的集群不兼容的elasticsearch 7”}
@333我还没有重新访问它。对不起,没有消息。