gpt4 book ai didi

Gradle 无法解决传递依赖,但直接依赖有效

转载 作者:行者123 更新时间:2023-12-02 01:53:48 25 4
gpt4 key购买 nike

我有一个包含以下依赖项的 Gradle 构建脚本(其他不多):

dependencies {
testCompile "com.foo:lib-foo:2.0.0-SNAPSHOT"
testCompile "com.foo:lib-bar:2.0.2-SNAPSHOT"
}

从 Maven 存储库 (Sonatyp Nexus OSS) 解析依赖项。 lib-bar依赖于 lib-foo在其 pom.xml 中声明:
<dependency>
<groupId>com.foo</groupId>
<artifactId>lib-foo</artifactId>
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
</dependency>

当我删除对 lib-bar 的依赖时从我的构建脚本(以及使用它的所有代码)来看,一切都可以正常编译。当 I 声明依赖项时,Gradle 会提示:
Could not resolve all dependencies for configuration ':testCompile'.
> Could not find any version that matches com.foo:lib-foo:[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT).
Required by:
:my-project:unspecified > com.foo:lib-bar:2.0.2-SNAPSHOT

相同的场景适用于 Maven。

tutorial没有提到 Gradles 处理传递依赖的能力的任何限制
或可以解释这一点的版本范围,所以我认为这会起作用。我用错了吗?我怎样才能让 Gradle 解决这种依赖?

PS:

当我跑 gradle test --info我明白了:
Resource missing. [HTTP HEAD: https://nexus.foo.com/nexus/content/groups/public/com/foo/lib-foo/2.0.0-SNAPSHOT/lib-foo-2.0.0-SNAPSHOT.pom]
Resource missing. [HTTP HEAD: https://nexus.foo.com/nexus/content/groups/public/com/foo/lib-foo/2.0.0-SNAPSHOT/lib-foo-2.0.0-SNAPSHOT.jar]

这些资源确实不存在,因为快照具有带时间戳的文件名。但是 Gradle 不应该使用 maven-metadata.xml解决这个问题?为什么当我直接声明依赖项时它会起作用?

最佳答案

Gradle 对版本范围的支持源自 Ivy。我认为发生的情况是不支持作为版本范围界限的快照,因此不被认可。因此,Gradle 尝试解析 2.0.0-SNAPSHOT3.0.0-SNAPSHOT作为静态版本。

带有快照边界的版本范围是什么意思?它们会匹配非快照版本(例如 2.5 )吗? [2.0.0, 3.0.0-SNAPSHOT)是什么意思然后?我还没有看到任何 Maven 文档中定义或提到的这种版本范围。如果这在最近的 Maven 版本中确实有效,您可能需要在 http://forums.gradle.org 提交改进请求。 .

关于Gradle 无法解决传递依赖,但直接依赖有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com