Java 如何在Gradle中共享通用测试依赖项版本?

Java 如何在Gradle中共享通用测试依赖项版本?,java,gradle,kotlin,build-tools,Java,Gradle,Kotlin,Build Tools,我在kotlinDSL中遵循这一点,试图使子项目使用根项目中指定的依赖版本。下面是rootbuild.gradle.kts的一部分: plugins { `java-platform` } dependencies { constraints { api("com.google.guava:guava:28.0-jre") api("org.testng:testng:6.14.3") } } 以下是子项目的build.gradle.

我在
kotlin
DSL中遵循这一点,试图使子项目使用根项目中指定的依赖版本。下面是root
build.gradle.kts的一部分:

plugins {
    `java-platform`
}

dependencies {
    constraints {
        api("com.google.guava:guava:28.0-jre")
        api("org.testng:testng:6.14.3")
    }
}

以下是子项目的
build.gradle.kts

plugins {
    `java-library`
}

dependencies {
    testImplementation("org.testng:testng")
}

val test by tasks.getting(Test::class) {
    useTestNG()
}
当我在项目根目录中运行
/gradlew run
时,一切正常。但是,当我运行
/gradlew test
时,它会抱怨:

失败:生成失败,出现异常。
*出了什么问题:
任务“:misc:java:compileTestJava”的执行失败。
>无法解析配置的所有文件:misc:java:testCompileClasspath。
>找不到组织。testng:testng:。
要求:
项目:杂项:java

我在网上到处搜索,但运气不好。我想我应该在根构建脚本中使用类似于
testapi(“org.testng:testng:6.14.3”)
的东西。

正如评论中已经回答的,您在子项目中缺少对平台的引用:

dependencies {
    implementation(platform(rootProject)) // Will use the constraints defined in the platform

    testImplementation("org.testng:testng")
}

鉴于您在配置testImplementation中使用依赖项,我宁愿猜测您应该使用testImplementation,而不是testapi。@JBNizet这也行不通:“未解析引用:testImplementation”OK。所以我读了手册:。平台项目使用java平台插件,允许使用两种配置:api和运行时。要使用平台项目中定义的约束的项目配置需要依赖于该项目。所以在你的例子中,我想:testImplementation(platform(rootProject))@jbnize如果你是对的,
implementation(platform(rootProject))
适合我。谢谢我的朋友!给你一个大大的拥抱!