为什么我必须声明一个依赖项的依赖项才能使我的构建工作?

Why do I have to declare a dependency of a dependency to make my build work?

我目前正在研究如何为我的公司高效使用 Gradle 和 Artifactory。我能够构建一些相互依赖的小测试程序和 junit 进行测试。
我们想要实现的目标之一是让我们在本地服务器上使用带有 Artifactory 的第三方库(因此不是来自 Maven 的镜像)。这就是出现一些问题的地方:没有 hamcrest,junit 就无法运行。所以我下载了它,但为了使构建工作,我必须指定额外的依赖项:

testCompile 'org.hamcrest:hamcrest-core:1.3'

但我在使用 Maven Central 时不必这样做,只有在处理我在 Artifactory 上下载的工件时才这样做。 显然,必须为具有许多依赖项的库执行此操作会很痛苦。
有人 运行 遇到过这个问题吗?有没有办法简单地解决它,或者我只是错过了什么?

(顺便说一句,我写了一个测试:program1 依赖于 program2,而 program2 又依赖于 program3,然后我构建了 program3 并将其发布到 Artifactory,然后是 program2,最后是 program1。我只需要声明它对 program2 的依赖即可构建工作,在那种情况下没有问题)
我希望我已经足够清楚了,提前致谢!

我很确定你在这里混淆了一些东西。几乎可以肯定这与 Maven Central vs. Artifactory 无关,只是我们用 program1/2/3 的小实验建议。

相反,很可能是 JUnit 造成了混乱。

JUnit 在大多数情况下都可以在没有 Hamcrest 的情况下正常工作。只有少数功能需要 Hamcrest,例如 Assert.assertThat 方法。如果您使用这些功能,则需要将 Hamcrest 声明为依赖项。

事情变得更加复杂,因为 JUnit 曾经包含一个版本的 Hamcrest,所以当您使用旧版本时,您甚至可以使用 assertThat 而无需将 Hamcrest 声明为单独的依赖项。