我正在尝试使用Gradle从Maven Central下载我最新发布的依赖项:
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.iltotore:ec-client_2.13:1.0-fixed'
}
尝试构建时,出现错误:
Could not find io.github.iltotore:core:1.0-fixed.
Required by:
project : > io.github.iltotore:ec-client_2.13:1.0-fixed
但是io.github.iltotore:core:1.0-fixed不在lib的pom中,我的朋友可以使用它而不会出现任何错误。
为解决此问题,我尝试:
运行gradlew build --refresh-dependency
删除〜/ .gradle /
使用Intellij IDEA使缓存无效
删除本地Maven
但是这个问题仍然存在。
我在Intellij IDEA 2020.1.2中使用Gradle 6.5。
答案 0 :(得分:1)
从Gradle 6.0开始,Maven Publish插件还将发布Gradle Module Metadata。元数据具有文件扩展名.module
,您可以在存储库here中看到它。
如果打开pom file,您会注意到顶部有一条注释:
<!-- This module was also published with a richer model, Gradle metadata, -->
<!-- which should be used instead. Do not delete the following line which -->
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
<!-- that they should prefer consuming it instead. -->
<!-- do_not_remove: published-with-gradle-metadata -->
这指示Gradle使用元数据文件而不是pom文件。
如果打开metadata file,则可以看到它确实与不存在的模块具有依赖性:
"dependencies": [
...
{
"group": "io.github.iltotore",
"module": "core",
"version": {
"requires": "1.0-fixed"
}
}
]
由于core
在任何版本中都不存在,所以我希望这是一个错误。也许您正在自定义pom文件,但未对模块元数据进行自定义。
有几种方法可以解决此问题(以下所有代码段均适用于Groovy DSL)。
这样,您将完全依赖pom文件。您可以通过类似的方式做到这一点:
tasks.withType(GenerateModuleMetadata) {
enabled = false
}
请参阅Gradle用户指南中的Understanding Gradle Module Metadata。
请注意,这仅对 all 模块有效,而不仅仅是损坏的模块:
repositories {
mavenCentral {
metadataSources {
mavenPom()
artifact()
ignoreGradleMetadataRedirection()
}
}
}
请参阅Gradle用户指南中的Declaring repositories。
类似的东西:
dependencies {
dependencies {
components {
// Fix wrong dependency in client_2.13
withModule("io.github.iltotore:ec-client_2.13") {
allVariants {
withDependencies {
removeAll { it.group == "io.github.iltotore" && it.name == "core" }
}
}
}
}
}
implementation 'io.github.iltotore:ec-client_2.13:1.0-fixed'
}
请参阅Gradle用户指南中的Fixing metadata with component metadata rules。