用java库渐变平台依赖关系



我们有几个通用库,它们使用java库Gradle插件,并通过对Micronaut BOM的平台依赖性依赖它。这两个项目都使用了Gradle 6.6.1,这是撰写本文时的最新版本。

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

当我试图在一个使用应用程序Gradle插件的应用程序中使用我的库时,我收到一个错误,说它无法解析库使用的Micronaut BOM。但它永远无法解决这种依赖关系,因为它是BOM,而不是库。

应用程序build.gradle

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文档,但这对我来说真的没有多大意义。有人知道我需要如何声明依赖项才能做到这一点吗?这似乎是一件微不足道的事情,但我还没有发现任何关于这件事的信息。。。

我使用的是Gradle v7.4,并通过将其添加到我的build.gradle:中解决了这个问题

java {
disableAutoTargetJvm()
}

我在升级Gradle5.x到6.0的笔记中找到了答案。

最新更新