You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:12:40