Android Library生成Jar文件遇组件/源码集报错,Java插件冲突如何解决?
解决Android Library发布到Bintray/Maven的Gradle配置问题
这是Android Library插件和纯Java Gradle配置不兼容的典型问题,我来一步步帮你理清并解决:
问题根源
Android Library插件(com.android.library)和纯Java插件的项目结构、组件模型完全不同,你之前的脚本是基于纯Java项目写的,直接套在Android库上自然会报错。
具体修复步骤
1. 修正SourcesJar任务的SourceSet引用
原来的代码用了纯Java项目的SourceSetContainer,但Android的SourceSet是在android.sourceSets下,所以修改sourcesJar任务:
val sourcesJar by tasks.registering(Jar::class) { archiveClassifier.set("sources") // 替换成Android库的main SourceSet from(android.sourceSets.getByName("main").allSource) }
2. 替换Publication中的组件引用
Android Library不会生成java组件,它的发布组件是release(默认的发布变体),所以修改publications部分:
publications { create<MavenPublication>(bintrayRepo) { groupId = publishedGroupId artifactId = artifact version = libraryVersion // 用Android的release组件替代java组件 from(components["release"]) artifact(sourcesJar.get()) artifact(dokkaJar.get()) // 你的其他配置... } }
3. 绝对不要添加Java插件
Android插件已经包含了Java/Kotlin编译、资源处理等所有必要功能,单独应用java插件必然会和Android插件产生冲突,直接跳过这一步即可。
为什么之前的报错会出现?
- 报错1:找不到'java'组件:Android Library插件生成的是Android变体组件(如
release/debug),而非纯Java项目的java组件。 - 报错2:找不到'main' SourceSet:纯Java项目的SourceSet在
project.sourceSets下,但Android的SourceSet是嵌套在android.sourceSets中的,直接访问顶层的SourceSetContainer自然找不到。 - 报错3:Java插件与Android插件不兼容:Android插件本身就是基于Java插件扩展而来的,重复应用会导致Gradle构建模型冲突。
这样修改后,你的发布脚本应该就能正常生成jar并发布到Bintray/Maven了。
内容的提问来源于stack exchange,提问作者GuilhE
相关产品推荐
相关产品推荐

