我有一个 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
当我从我的构建脚本(以及所有使用它的代码)中删除依赖项时,一切都编译得很好。当我声明依赖时,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。
本教程没有提到对 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
用来解决这个问题吗?为什么当我直接声明依赖项时它会起作用?