Gradle无法解析可传递依赖项,但直接依赖项有效

Gradle无法解析可传递依赖项,但直接依赖项有效,gradle,transitive-dependency,maven,Gradle,Transitive Dependency,Maven,我有一个Gradle构建脚本,其中包含以下依赖项(其他不多): 依赖项从Maven存储库(Sonatyp Nexus OSS)解析lib-bar依赖于其pom.xml中声明的lib-foo: <dependency> <groupId>com.foo</groupId> <artifactId>lib-foo</artifactId> <version>[2.0.0-SNAPSHOT, 3.0.0-S

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

依赖项从Maven存储库(Sonatyp Nexus OSS)解析
lib-bar
依赖于其
pom.xml
中声明的
lib-foo

<dependency>
    <groupId>com.foo</groupId>
    <artifactId>lib-foo</artifactId>
    <version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
</dependency>
同样的场景也适用于Maven

没有提到Gradles处理可传递依赖关系能力的任何限制 或者可以解释这一点的版本范围,所以我认为这是可行的。我用错了吗?我如何让Gradle解决这种依赖关系

附言:

当我运行
gradle测试--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-SNAPSHOT
3.0.0-SNAPSHOT
解析为静态版本


具有快照边界的版本范围的含义是什么?它们是否与非快照版本(例如
2.5
)匹配?那么
[2.0.0,3.0.0-SNAPSHOT)
的含义是什么呢?我还没有看到任何Maven文档中定义或提到过这种版本范围。如果这在最新的Maven版本中一直有效,您可能需要在上提交改进请求。

而Peter提供了有用的见解和最终提示(),他没有发布解决方案,因此出现了:

dependencies {
    testCompile "com.foo:lib-foo:2.0.0-SNAPSHOT"
    testCompile("com.foo:lib-bar:2.0.2-SNAPSHOT") {
        transitive = false
    }
}

这告诉Gradle不要解析
lib-bar
的可传递依赖项。在这种情况下,这不需要修改,因为
lib-bar
的唯一可传递依赖项已经包含在内。

由于这是一个公共存储库,请命名具体的依赖项。它不是一个公共存储库。只能从在我的公司内部,所涉及的库也是内部的。感谢您的快速响应!版本范围使用快照,因为
[2.0.0,3.0.0)
将包括
3.0.0-SNAPSHOT
。如果只有一个版本是快照,而另一个版本是发行版,Maven的行为就好像两个版本都是发行版一样,给出了相同的错误行为。我们使用的是语义版本控制,这依赖于这些版本范围。那么
[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)
匹配?它匹配从
2.0.0-SNAPSHOT
(包括
2.0.0
发行版)到
2.X.X
的任何内容,不包括主要版本3或更高版本的内容。因此,当您希望在这些边界之间使用最新版本时,无论它是否是快照?是的,完全正确。(填充空格)
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]
dependencies {
    testCompile "com.foo:lib-foo:2.0.0-SNAPSHOT"
    testCompile("com.foo:lib-bar:2.0.2-SNAPSHOT") {
        transitive = false
    }
}