Gradle导出versionCatalogs库被引用时报No matching variant错误如何解决?
问题修复方案
错误原因
你当前打包的构件被标记为普通Java库变体,和使用方需要的version-catalog变体属性不匹配,核心是因为模块中同时引入了java-library和version-catalog插件,Java插件生成的默认变体覆盖了版本目录需要的变体配置。
修复步骤
方案一:模块仅作为版本目录使用(最常用)
如果这个模块不需要打包Java/Kotlin代码,仅用来发布统一版本目录,直接删除冗余配置即可:
- 修改插件配置块,移除不必要的Java和Kotlin插件:
plugins { // 删掉下面两行 // id 'java-library' // id 'kotlin' id 'version-catalog' }
- 删掉多余的Java版本配置块:
// 整块删除 // java { // sourceCompatibility = JavaVersion.VERSION_1_7 // targetCompatibility = JavaVersion.VERSION_1_7 // }
- 确认发布脚本
publish-module.gradle中是基于components.versionCatalog发布构件,示例发布配置参考:
publishing { publications { maven(MavenPublication) { groupId = PUBLISH_GROUP_ID artifactId = PUBLISH_ARTIFACT_ID version = PUBLISH_VERSION from components.versionCatalog } } }
修改完成后重新发布新版本,使用方引用对应新版本即可正常识别。
方案二:模块需要同时作为Java库和版本目录发布
如果模块中确实有Java/Kotlin代码需要同时发布,需要手动配置版本目录的消费变体:
- 增加变体属性配置:
configurations { versionCatalogElements { canBeResolved = false canBeConsumed = true attributes { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.PLATFORM)) attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.VERSION_CATALOG)) } } } artifacts { versionCatalogElements catalog.versionCatalog }
- 在发布配置中把上述变体加入发布产物即可。
内容的提问来源于stack exchange,提问作者Elye
相关产品推荐
相关产品推荐

