如何在Gradle中从指定依赖项排除特定包?
问题原因
你之前的配置不生效是因为Gradle的exclude语法中,module参数对应的是依赖构件的名称,而非Jar包内部的Java包路径,直接填写包名无法匹配到要排除的内容。
可行实现方案
分两种场景适配:
场景1:要排除的com.ibm.cloud.sdk.core.http包归属独立依赖构件
该包通常属于com.ibm.cloud:ibm-cloud-sdk-core公共依赖,此时直接排除整个对应构件即可,写法如下:
implementation (group: 'com.ibm.cloud', name: 'ibmcloudsql-jdbc', version: '2.5.34') { exclude group: 'com.ibm.cloud', module: 'ibm-cloud-sdk-core' }
配置完成后可执行./gradlew dependencies命令查看依赖树,确认该构件已被排除。
场景2:目标包直接内嵌在ibmcloudsql-jdbc Jar中,或仅需排除该包无需排除整个sdk-core构件
此时需要借助ShadowJar插件在打包阶段过滤指定包,操作步骤如下:
- 引入ShadowJar插件
plugins { id 'com.github.johnrengelman.shadow' version '7.1.2' // 可根据你的Gradle版本选择匹配的插件版本 id 'java' }
- 配置打包过滤规则
shadowJar { dependencies { exclude(dependency('com.ibm.cloud:ibm-cloud-sdk-core')) { exclude 'com/ibm/cloud/sdk/core/http/**' } } // 若需要将shadowJar作为项目默认构建产物,可添加以下配置 // jar.enabled = false }
配置完成后执行./gradlew shadowJar命令打包,解压生成的Jar包即可验证指定包已被移除。
内容的提问来源于stack exchange,提问作者Chinmay Das
相关产品推荐
相关产品推荐

