Gradle如何仅打包依赖jar包 排除当前模块自身jar文件
配置方案
Groovy 写法
直接在build.gradle中添加自定义Zip类型任务即可:
task packageDependenciesOnly(type: Zip) { // 打包所有runtimeClasspath下的依赖jar,默认不包含当前模块自身产物 from configurations.runtimeClasspath // 自定义压缩包内部存放依赖的目录,不需要可直接删除该行 into 'lib' // 自定义输出zip包的文件名前缀 archiveBaseName = 'dependencies-only' }
执行./gradlew packageDependenciesOnly命令,即可在build/distributions目录下获取仅包含依赖jar的zip包。
如果需要过滤特定依赖,可添加排除规则:
task packageDependenciesOnly(type: Zip) { from configurations.runtimeClasspath { // 排除指定坐标的依赖示例 exclude group: 'com.example.unwanted', module: 'test-lib' // 排除所有快照版本依赖示例 exclude { it.version.contains('SNAPSHOT') } } into 'lib' archiveBaseName = 'dependencies-only' }
Kotlin DSL 写法
对应build.gradle.kts的实现如下:
tasks.register<Zip>("packageDependenciesOnly") { from(configurations.runtimeClasspath) // 自定义压缩包内部存放依赖的目录 into("lib") // 自定义输出zip包的文件名前缀 archiveBaseName.set("dependencies-only") }
带过滤规则的版本:
tasks.register<Zip>("packageDependenciesOnly") { from(configurations.runtimeClasspath.get().filter { // 特殊场景下可手动排除当前模块生成的jar,普通场景无需添加该规则 !it.name.startsWith(project.name) // 额外排除指定依赖示例 && !it.path.contains("unwanted-lib") }) into("lib") archiveBaseName.set("dependencies-only") }
注意事项
configurations.runtimeClasspath默认仅包含当前模块的第三方依赖,不会包含当前模块编译生成的jar,无特殊自定义配置的场景不需要额外做自身jar的排除。- 生成的zip包默认输出路径为
build/distributions/${archiveBaseName}.zip,你可以通过destinationDirectory.set(...)自定义输出路径。 - 如果需要打包compileOnly等其他作用域的依赖,替换
runtimeClasspath为对应配置名即可。
内容的提问来源于stack exchange,提问作者user2297550
相关产品推荐
相关产品推荐

