我有一个 Android 库项目,它使用版本 7 的“Gradle”和“Android Gradle 插件”(准确地说分别是版本 7.6.1 和 7.4.2)。
以下是我的图书馆
build.gradle
文件中与发布相关的部分:
plugins {
id("com.android.library")
id("maven-publish")
}
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
archiveClassifier.set('sources')
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
artifact generateSourcesJar
groupId 'com.tazkiyatech'
artifactId 'android-utils'
version '1.0.0'
}
}
repositories {
maven {
name = 'BuildFolder'
url = "${project.buildDir}/repository"
}
}
}
}
我的项目可用的各种
publish...
Gradle 任务工作正常,直到我将项目中的“Gradle”和“Android Gradle 插件”版本升级到版本 8。一旦我升级到版本 8,各种 publish...
Gradle 任务失败并返回以下错误:
* What went wrong:
A problem was found with the configuration of task ':library:generateSourcesJar' (type 'Jar').
- Gradle detected a problem with the following location: '/Users/adil/Work/TazkiyaTech/android-utils/library/build/libs/library-sources.jar'.
Reason: Task ':library:generateMetadataFileForReleasePublication' uses this output of task ':library:generateSourcesJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
Possible solutions:
1. Declare task ':library:generateSourcesJar' as an input of ':library:generateMetadataFileForReleasePublication'.
2. Declare an explicit dependency on ':library:generateSourcesJar' from ':library:generateMetadataFileForReleasePublication' using Task#dependsOn.
3. Declare an explicit dependency on ':library:generateSourcesJar' from ':library:generateMetadataFileForReleasePublication' using Task#mustRunAfter.
For more information, please refer to https://docs.gradle.org/8.2.1/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.
我无法执行错误输出中列出的可能解决方案,因为我无法弄清楚如何在我拥有的
generateSourcesJar
任务和我不拥有的 generateMetadataFileForReleasePublication
任务之间创建依赖关系.
如何解决此错误并使用“Gradle”版本 8 和“Android Gradle 插件”发布我的库?
自从我将库升级到“Gradle”和“Android Gradle 插件”版本 7 以来,我发现Android Gradle 插件 > 发布你的库 文档中的说明发生了显着变化。
根据最新说明(对于“Gradle”和“Android Gradle 插件”版本 8),我的库的
build.gradle
文件中与发布相关的部分更改为以下内容:
plugins {
id("com.android.library")
id("maven-publish")
}
android {
publishing {
singleVariant('release') {
withSourcesJar()
}
}
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
groupId 'com.tazkiyatech'
artifactId 'android-utils'
version '1.0.0'
}
}
repositories {
maven {
name = 'BuildFolder'
url = "${project.buildDir}/repository"
}
}
}
}
最重要的变化是我不再需要定义自定义 Gradle 任务来为我的库源生成 Jar。
我整理了一个最小的项目here,它充分演示了如何使用“Gradle”版本 8 和“Android Gradle 插件”发布 Android 库。