我正在尝试使用java-platform插件在多模块项目中共享依赖项约束。我想做的是设置一个名为platform的模块,可以在其他模块中使用platform(project(":platform"))导入该模块。另外,我想使用platform("group-id:of-the-bom:and-version")将BOM导入到我的平台项目中。

一个示例是以下结构:

// settings.gradle
include("platform")
include("consumer")

// platform/build.gradle
apply plugin: 'java-platform'

repositories {
    mavenCentral()
}

dependencies {
    constraints {
        api platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final")
    }
}

// consumer/build.gradle
apply plugin: 'java-library'

repositories {
    mavenCentral()
}

dependencies {
    implementation platform(project(":platform"))
    implementation "org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec"
}

当我运行gradle consumer:dependencies时,我得到包含以下内容的输出:
compileClasspath - Compile classpath for source set 'main'.
+--- project :platform
\--- org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec FAILED

好像platform模块不是“重新导出”约束,这些约束是通过使用platform()引入的。

我发现了两个“变通办法”,它们不能真正解决我的问题,但似乎表明问题在于platform()java-platform插件的使用:
  • implementation platform(project(":platform"))替换为implementation platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final")中的consumer/build.gradle
  • platform/build.gradle中放置一个显式条目,例如api org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.1.Final

  • 是否不打算以这种方式使用java-platform插件,或者我缺少某些配置选项?

    最佳答案

    在Gradle中导入BOM意味着您要依赖BOM来应用其提供的约束。

    默认情况下,您添加到平台上的是约束。但是,仅当且仅当存在匹配的依赖项声明时,约束才会出现在图形中。同样,约束条件仅告知目标模块。他们从不带来任何传递信息。

    因此,您需要做的是声明您的platform项目取决于BOM。然后它将按预期导出其约束。

    // platform/build.gradle
    apply plugin: 'java-platform'
    
    repositories {
        mavenCentral()
    }
    
    javaPlatform {
        // Declare that your platform contains dependencies
        allowDependencies()
    }
    
    dependencies {
        // This is a dependency on the BOM that will bring its constraints transitively
        api platform("org.wildfly.bom:wildfly-javaee8:15.0.1.Final")
        constraints {
            // Additional constraints not covered by the platform above go here
        }
    }
    

    关于Gradle Java平台插件和平台定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54647730/

    10-12 01:47