如何通过Gradle将本地Jar的类打包到Kotlin JVM发布Jar包中
解决方案
直接修改build.gradle.kts,在原有配置基础上新增Jar任务的合并逻辑即可,该配置兼容java-gradle-plugin的发布流程,不会影响后续插件发布操作。
完整配置示例
plugins { id("java-gradle-plugin") kotlin("jvm") } dependencies { implementation(kotlin("gradle-plugin-api")) implementation(fileTree("lib") { include("*.jar") }) } // 合并本地Jar到构建产出的核心配置 tasks.jar { // 筛选lib目录下的所有Jar依赖,解压后合并到最终Jar from( configurations.runtimeClasspath.get() .filter { it.parentFile.name == "lib" && it.extension == "jar" } .map { zipTree(it) } ) // 可选:配置重复文件处理策略,避免类/资源重复导致构建报错 duplicatesStrategy = DuplicatesStrategy.EXCLUDE }
配置说明
- 该逻辑只会合并
lib目录下的本地Jar,不会把其他远程依赖的类也打包进去,符合仅整合未公开依赖的需求 zipTree是Gradle内置工具,会自动解压Jar文件,把类文件、资源文件都合并到最终产出的Jar根目录- 配置默认优先保留项目自身的代码文件,遇到重复内容会跳过本地Jar里的重复项
验证方式
构建完成后执行以下命令,即可查看最终Jar包内的所有类,确认本地Jar的类已经成功合并:jar tf build/libs/[你的构建产物名称].jar
内容的提问来源于stack exchange,提问作者Kevin Galligan
相关产品推荐
相关产品推荐

