带有java库的Gradle平台依赖项

带有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 (

我们有两个公共库,它们使用java库Gradle插件,并通过平台依赖于Micronaut的BOM来依赖Micronaut。两个项目都使用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"
    )
}

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我还没有重新访问它。对不起,没有消息。