我正在将一个旧的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>
**问题是:**以前生成的POM是否错误,因为它应该将Kotlin作为编译依赖项包括在内,尽管它只用于测试?
或者,在这种特定情况下,我是否必须做一些特殊的事情来排除“依赖关系”?如果是这样,如果在定义发布时生成POM,我如何排除它?
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
....
pom {
name = ...
licenses { }
developers { }
scm { }
}
}
}
}
}
或者,这不是一个好的选择,我应该用Java重写测试吗?
值得注意的是,删除kotlin-android
插件也会将其作为编译依赖项从POM中删除,这似乎对生成AAR没有影响;它只会阻止测试运行。
2条答案
按热度按时间y4ekin9u1#
从Kotlin1.4开始,各种Kotlin Gradle插件会自动添加对kotlin-std的依赖关系。
您可以通过添加到
gradle.properties
来禁用它:pvabu6sv2#
去"回答"我自己的问题,希望有人纠正我,如果有什么不对的。
之前生成的POM是否有错误,它应该将kotlin作为编译依赖项包括在内,尽管它只用于测试?
不可以,
kotlin-stdlib
不应该包含在没有kotlin代码或基于kotlin的依赖项的java/android库的发布发布的POM中。我之所以做出这样的Assert,是因为我已经针对这个库的一个版本编译了一个纯Java应用程序,其中
kotlin-stdlib
编译条件从POM中删除,并且一切都按预期运行(因为它工作)。如果是这样的话,如果在定义发布时生成POM,我如何排除它呢
定义POM之后,您可以使用MavenPom插件中的pom. withXml来删除您想要从生成的POM中排除的依赖节点。
module.json
中删除依赖项,所以现在看起来比以前更错误。相反,您可以检查Gradle启动参数以确定当前任务请求针对的变体,并仅在变体实际应包含插件时应用该插件:
related answer的评论者注意到变体名称应该以大写字母开头。
或者,这不是一个好的选择,我应该用Java重写测试吗?
那是放弃。