昨天我将 Android Studio 升级到 Arctic Fox,它从 Gradle 6 升级到 7。 Gradle 7 删除了“maven”插件,我的团队一直使用该插件将我们拥有的 Android 库打包到 AAR 文件中,作为自动化/CI 构建的一部分。
之前在我们库的 build.gradle
文件中我们有
apply plugin: 'maven'
...
android {
// normal android library stuff here
}
...
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://$projectDir/deploy")
}
}
}
这样做的结果是我们可以运行 gradle uploadArchives
,并且一个漂亮的 Maven 目录结构将输出到 $projectDir/deploy
文件夹中。我们的 CI 系统可以接收并分发它,一切都很好。
(作为引用,它看起来像这样,我希望用 Gradle 7 重现)
deploy/
com/
mycompany/
mylibrary/
maven-metadata.xml
maven-metadata.xml.sha1
1.0.0/
mylibrary.aar
mylibrary.aar.sha1
mylibrary-1.0.0.pom
mylibrary-1.0.0.pom.sha1
(.md5 文件也在那里,但并不重要)
但是,Gradle 7 删除了所有这些内容,并告诉我们使用 maven-publish
插件,但我无法使用该插件。
这是我目前的最大努力,基于Google's page here
apply plugin: 'maven-publish'
...
android {
// normal android library stuff here
}
...
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
}
debug(MavenPublication) {
from components.debug
}
}
}
repositories {
maven {
url = layout.buildDirectory.dir('deploy')
}
}
}
但是,当运行它时,它不会产生所需的输出。这是 ./gradlew --infopublish
的输出:
> Task :mylibrary:publish UP-TO-DATE
Skipping task ':mylibrary:publish' as it has no actions.
:mylibrary:publish (Thread[Execution worker for ':',5,main]) completed. Took 0.002 secs.
当我运行 ./gradlew --infopublishRelease
时,它会记录更多内容,并且实际上会编译库,但它不会“发布”它。我最终得到这样的目录结构:
mylibrary/
build/
publications/
release/
pom-default.xml
module.json
outputs/
aar/
mylibrary-release.aar
没有 deploy
文件夹,也没有版本化的 maven 文件夹层次结构。
请帮忙?互联网上充满了讨论 maven-publish 插件的复杂 gradle 文档,但没有一个是针对 Android 的,而且似乎没有一个可以在 Android 库的上下文中工作。
最佳答案
经过多次尝试,我设法使用以下 gradle 配置解决了这个问题:
apply plugin: 'maven-publish'
...
android {
// normal android library stuff here
}
...
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
}
debug(MavenPublication) {
from components.debug
}
}
// note repositories goes under publishing
repositories {
maven {
url = "file://$projectDir/deploy"
}
}
}
}
进行此更改后,您需要运行 gradlepublishReleasePublicationToMavenRepository
而不是 uploadArchives
然后它就可以工作了。
关于java - 升级到Gradle 7后如何将android库发布到本地目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68678583/