Gradle 下载不需要的依赖项
Gradle downloads unrequired dependencies
我正在尝试使用 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
但这个问题仍然存在。
我使用 Gradle 6.5 和 Intellij IDEA 2020.1.2。
从Gradle 6.0开始,Maven Publish插件也会发布Gradle Module Metadata. The metadata has the file extension .module
and you can see it in the repository 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。
乙。在消费项目的存储库中禁用模块元数据
请注意,这对 所有 模块都有效,而不仅仅是损坏的模块:
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。
我正在尝试使用 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
但这个问题仍然存在。
我使用 Gradle 6.5 和 Intellij IDEA 2020.1.2。
从Gradle 6.0开始,Maven Publish插件也会发布Gradle Module Metadata. The metadata has the file extension .module
and you can see it in the repository 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。
乙。在消费项目的存储库中禁用模块元数据
请注意,这对 所有 模块都有效,而不仅仅是损坏的模块:
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。