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

时间:2015-08-05 16:03:07

标签: java maven gradle dependencies artifactory

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

  

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

但是在使用Maven中心时我没有必要这样做,只有在处理我在Artifactory上下载的文物时才这样做。 显然,对于具有许多依赖关系的库来说,这样做会很麻烦 有人遇到过这个问题吗?有没有办法简单地解决它或者我只是错过了什么?

(顺便说一下,我写了一个测试:program1依赖于program2,它依赖于program3,然后我构建了program3并将其发布到Artifactory,然后发布到program2,最后发布到program1。我只需要声明它对program2的依赖,使构建工作正常,那种情况没有问题)
我希望我很清楚,提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

相反,很可能JUnit引起了混乱。

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

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