如何在Java Catalog的build.gradle中排除依赖以避免加载android.jar
解决Gradle Catalog中SnakeYaml加载android.jar失败的问题
问题场景
在Gradle Catalog的build.gradle中声明如下依赖:
library('snakeyaml', 'org.yaml', 'snakeyaml').version('2.0')
编译测试代码时抛出如下错误:
执行失败,任务 ':compileTestJava' 出错。
无法解析配置 ':testCompileClasspath' 的所有文件。
找不到 snakeyaml-2.0-android.jar (org.yaml:snakeyaml:2.0)。
已在以下位置搜索:
https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.0/snakeyaml-2.0-android.jar
解决方案
在Gradle Catalog本身中通过以下方式排除Android变体,强制使用标准JVM版本的SnakeYaml:
方式一:指定标准JVM变体能力
修改Catalog中的依赖声明,明确要求标准JVM能力的构件:
library('snakeyaml', 'org.yaml', 'snakeyaml') { version = '2.0' variant('runtimeElements') { capabilities { requireCapability('org.yaml:snakeyaml') } } }
方式二:直接排除Android变体能力
通过排除Android专属的能力,避免Gradle尝试拉取android.jar:
library('snakeyaml', 'org.yaml', 'snakeyaml') { version = '2.0' excludeCapability('org.yaml:snakeyaml-android') }
方式三:指定标准jar构件
直接指定拉取标准jar文件,跳过变体匹配:
library('snakeyaml', 'org.yaml', 'snakeyaml').version('2.0').artifact { name = 'snakeyaml' type = 'jar' }
原因说明
SnakeYaml 2.0采用了多变体发布策略,包含标准JVM版和Android适配版。Gradle会根据项目环境自动匹配对应变体,若你的项目并非Android项目,却触发了Android变体的匹配逻辑,就会出现找不到对应jar包的错误。通过上述配置可强制Gradle拉取标准JVM版本的构件。
内容的提问来源于stack exchange,提问作者user352290
相关产品推荐
相关产品推荐

