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

如何导出包含jcenter依赖库的Jar包?附现有makeJar任务代码

如何将JCenter依赖嵌入自定义导出的Jar包?

嘿,你当前用的makeJar任务只是把自己项目编译后的classes.jar重命名导出,并没有包含第三方依赖的内容。要把com.lzy.net:okgo:3.0.4这类JCenter依赖也打包进最终的ble_sdk.jar,可以试试下面的方法:

方法一:改用Gradle Jar任务直接包含依赖

把原来的Copy类型任务换成Jar类型,这样能更灵活地配置要打包的内容,包括第三方依赖的class文件。替换后的任务代码如下:

task makeJar(type: Jar) {
    // 指定最终导出的Jar包名称
    archiveName = 'ble_sdk.jar'
    // 包含自己项目编译生成的所有class文件
    from sourceSets.main.output
    // 遍历所有运行时依赖,将依赖Jar里的内容打包进来
    configurations.runtimeClasspath.each { file ->
        if (file.name.endsWith('.jar')) {
            from zipTree(file)
        }
    }
    // 设置Jar包输出目录
    destinationDirectory.set(file('build/libs'))
}
// 确保先完成项目编译,再执行打包任务
makeJar.dependsOn(build)

代码解释

  • sourceSets.main.output:替代了你原来引用的build/intermediates/bundles/release/classes.jar,会自动包含项目所有编译后的class文件
  • configurations.runtimeClasspath.each:遍历项目所有运行时依赖的Jar包,用zipTree解压每个Jar并把内容合并到最终的ble_sdk.jar里,这样OkGo这类依赖的代码就会被嵌进去了

可选:只打包指定依赖

如果你不想把所有第三方依赖都嵌进去,只想包含OkGo这类特定依赖,可以给遍历逻辑加个过滤:

configurations.runtimeClasspath.each { file ->
    // 只包含名称带有okgo的依赖Jar
    if (file.name.contains('okgo')) {
        from zipTree(file)
    }
}

额外提醒

  • 要是担心后续出现依赖冲突(比如你的SDK被其他项目引用时,对方也用了相同版本的OkGo),可以考虑用Gradle的Shadow插件,它能帮你重命名依赖的包名,从根本上避免冲突
  • 记得把原来的Copy类型makeJar任务删掉,避免任务冲突

内容的提问来源于stack exchange,提问作者Dalai_Lama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:42:35