Gradle排除azure-storage-blob的stax2-api传递依赖不生效如何解决
你当前在依赖树中看到的org.codehaus.woodstox:stax2-api:4.2 -> 3.1.4标识,本质是Gradle依赖仲裁的结果:你自身显式声明了3.1.4版本的stax2-api直接依赖,所以传递依赖路径中出现的4.2版本stax2-api会被自动替换为你指定的版本,并不是你配置的排除规则没有生效。
你可以做个简单验证:临时注释掉你声明的stax2-api直接依赖,再执行gradle -q dependencies查看依赖树,会发现azure-storage-blob整条依赖链中已经没有stax2-api的存在,说明你之前在azure-storage-blob上配置的排除规则已经递归生效。
如果你只是要保证项目中所有stax2-api都使用3.1.4版本,当前状态已经满足需求,不需要额外调整。
如果你确实需要完全切断azure-storage-blob依赖链和stax2-api的关联(即便没有你声明的直接依赖,azure链也不会引入stax2-api),可以采用全局配置排除的方案,作用范围覆盖所有传递依赖:
// 针对编译类路径全局排除stax2-api,仅保留你显式声明的直接依赖 configurations { implementation { exclude group: 'org.codehaus.woodstox', module: 'stax2-api' } // 如果是仍使用compile配置的低版本Gradle,替换为下面的配置 // compile { // exclude group: 'org.codehaus.woodstox', module: 'stax2-api' // } } // 保留你需要的直接依赖 implementation group: 'org.codehaus.woodstox', name: 'stax2-api', version: '3.1.4' // 低版本Gradle用:compile group: 'org.codehaus.woodstox', name: 'stax2-api', version: '3.1.4' // 引入azure依赖,无需单独加排除规则 implementation "com.azure:azure-storage-blob:12.13.0" // 低版本Gradle用:compile "com.azure:azure-storage-blob:12.13.0"
如果要更稳妥的强制版本管控,避免其他未覆盖的依赖引入不同版本的stax2-api,还可以加上版本强制规则:
configurations.all { resolutionStrategy.force 'org.codehaus.woodstox:stax2-api:3.1.4' }
内容的提问来源于stack exchange,提问作者Isaac Mateus
相关产品推荐
相关产品推荐

