Gradle下载不需要的依赖项

时间:2020-06-19 06:57:00

标签: java gradle maven-central

我正在尝试使用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。

1 个答案:

答案 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)。

A。发布不包含模块元数据的新版本

这样,您将完全依赖pom文件。您可以通过类似的方式做到这一点:

tasks.withType(GenerateModuleMetadata) {
    enabled = false
}

请参阅Gradle用户指南中的Understanding Gradle Module Metadata

B。在使用项目中的存储库中禁用模块元数据

请注意,这仅对 all 模块有效,而不仅仅是损坏的模块:

repositories {
    mavenCentral {
        metadataSources {
            mavenPom()
            artifact()
            ignoreGradleMetadataRedirection()
        }
    }
}

请参阅Gradle用户指南中的Declaring repositories

C。针对这种特殊依赖性,在使用方更正元数据

类似的东西:

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