升级Gradle 8.0后Android库发布任务依赖未声明错误求助
解决Gradle 8.0发布Android库的任务依赖错误
错误原因
Gradle 8.0强化了任务依赖校验,当发布任务直接调用其他任务的输出文件但未显式/隐式声明依赖关系时,会触发执行顺序异常的报错。
修复步骤
1. 修正AAR文件的任务依赖
不要硬编码AAR的文件路径,改为直接引用bundleReleaseAar任务的输出产物,让Gradle自动维护任务执行顺序:
// 替换原publishing区块里的artifact("$buildDir/outputs/aar/libraryname-release.aar") artifact(tasks.named('bundleReleaseAar'))
2. 修复androidSourcesJar的依赖声明
在MavenPublication中直接传入androidSourcesJar任务对象,而非文件路径,Gradle会自动识别依赖关系:
// 替换原artifact(sourceJar)(若无需JNI库源码可直接删除sourceJar任务) artifact(tasks.named('androidSourcesJar'))
3. 清理冗余任务(可选)
原配置中sourceJar和androidSourcesJar功能重叠,建议合并为一个任务,同时包含Java源码和JNI库源码:
// 删除原有的sourceJar和androidSourcesJar任务,替换为合并版本 task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.sourceFiles from android.sourceSets.main.jniLibs.srcDirs }
完整修改后的关键代码片段
apply plugin: 'com.android.library' apply plugin: 'maven-publish' // 合并后的源码打包任务 task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.sourceFiles from android.sourceSets.main.jniLibs.srcDirs } version = '8.0.0' android { ... } dependencies { ... } android.libraryVariants.all { def aptOutputDir = new File(buildDir, "generated/source/apt/${it.unitTestVariant.dirName}") it.unitTestVariant.addJavaSourceFoldersToModel(aptOutputDir) } publishing { publications { maven(MavenPublication) { version = version artifactId = "your_artifact_id" groupId = "com.yourgroup.id" // 直接引用任务对象,自动建立依赖 artifact(tasks.named('androidSourcesJar')) artifact(tasks.named('bundleReleaseAar')) } } repositories { maven { def releasesUrl = "releaseurl_ifavailable" def snapshotsUrl = "snapshoturl_ifavailable" url = version.endsWith('SNAPSHOT') ? snapshotsUrl : releasesUrl credentials { username = your_username password = your_password } } } } artifacts { archives androidSourcesJar }
额外说明
- 使用
tasks.named()引用任务,Gradle会自动确保androidSourcesJar和bundleReleaseAar在发布任务执行前完成。 - 若需支持多变体发布(如debug/release),可遍历
libraryVariants动态生成对应Publication,而非固定使用release变体。
内容的提问来源于stack exchange,提问作者Mayank Pandit
相关产品推荐
相关产品推荐

