Gradle 7.0.2运行lintDebug时lintClassPath无法解析模块元数据报错
问题原因
这个报错本质是Gradle 7默认优先拉取Gradle Module Metadata(后缀为.module的元数据文件),而你配置的私有Artifactory制品库中org.testng:testng:7.3.0对应的.module文件损坏、返回内容不是合法JSON,导致解析失败。
普通应用构建不会触发lintClassPath配置的依赖拉取,只有执行lint相关任务时才会用到该配置下的依赖,所以你正常构建应用没有问题。
解决方案
- 方案1:禁用对应制品库的Gradle Module Metadata解析(优先推荐,不需要改动依赖版本也不需要操作制品库)
在根项目的build.gradle或settings.gradle的制品库配置块中添加元数据解析规则,强制使用pom文件解析:
repositories { maven { url "https://<你的Artifactory地址>" metadataSources { mavenPom() // 优先使用pom.xml解析依赖 artifact() // 直接通过artifact匹配 ignoreGradleMetadataRedirection() // 忽略Gradle元数据重定向 } } }
- 方案2:调整lintClassPath的依赖规则
在根项目build.gradle中添加如下配置,直接排除lint不需要的groovy-testng依赖,或者强制指定testng的可用版本:
configurations { lintClassPath { // 方案2-1:直接排除groovy-testng依赖,lint运行不需要testng相关能力 exclude group: 'org.codehaus.groovy', module: 'groovy-testng' // 方案2-2:如果排除后有问题,可强制指定一个制品库中元数据正常的testng版本 // resolutionStrategy.force 'org.testng:testng:7.4.0' } }
方案3:修复制品库中的损坏文件
如果有权限操作私有Artifactory,可找到org/testng/testng/7.3.0路径下的testng-7.3.0.module文件,删除该损坏文件后触发重新从公共仓库同步,即可从根本解决问题。方案4:临时调试方案
如果仅本地临时调试,可以将google()、mavenCentral()等公共仓库添加到制品库配置的最顶部,优先拉取公共仓库的合法元数据,即可绕过私有仓库的损坏文件问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

