在为 Android 工件生成的 POM 中排除 Kotlin stdlib 的 testImplementation 依赖项

Cru*_*ceo 2 java android gradle maven

鉴于旧的 Android 库已弃用,我正在将其从 jcenter 迁移到 mavenCentral。所有实际的库模块都是用 Java 编写的,但其中一些模块的测试是用 Kotlin 编写的。

在升级(升级到 AS 4.1.3、Gradle 6.8.3)之前,生成的 POM 从未包含对kotlin-stdlib. 现在看来,应用该kotlin-android插件会导致生成的 POM 添加它,即使依赖项包含为testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.31".

  <dependencies>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>1.4.31</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
Run Code Online (Sandbox Code Playgroud)

问题:之前生成的 POM 是否错误,因为它应该包含 kotlin 作为编译依赖项,即使它仅用于测试?

或者,我是否需要做一些特殊的事情来排除这种特定情况下的“依赖性”?如果是这样,如果在定义发布时生成 POM,我如何排除它,例如:

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                ....

                pom {
                    name = ...
                    licenses { }
                    developers { }
                    scm { }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,这不是一个好的选择,我应该用 Java 重写测试吗?

值得注意的是,删除kotlin-android插件也会将其作为编译依赖项从 POM 中删除。似乎对生成AAR没有影响;它只是阻止测试运行。

Mar*_*eel 7

从 Kotlin 1.4 开始,各种 Kotlin Gradle 插件会自动添加对 kotlin-std 的依赖项。请参阅对标准库的依赖关系

您可以通过添加以下内容来禁用它gradle.properties

kotlin.stdlib.default.dependency=false
Run Code Online (Sandbox Code Playgroud)