【问题标题】:Why do I have to declare a dependency of a dependency to make my build work?为什么我必须声明依赖项的依赖项才能使我的构建工作?
【发布时间】:2015-08-06 00:09:51
【问题描述】:

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

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

但在使用 Maven Central 时,我不必这样做,仅在处理我在 Artifactory 上下载的人工制品时。 显然,对于具有许多依赖项的库来说,这样做会很痛苦。
有没有人遇到过这个问题?有没有办法简单地解决它,或者我只是错过了什么?

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

【问题讨论】:

    标签: java maven gradle dependencies artifactory


    【解决方案1】:

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

    反而很可能是 JUnit 引起了混乱。

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

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

    【讨论】:

    • 你是对的。发生的事情是 junit 无法工作,因为它的依赖项没有下载。因此,添加额外内容只是为我提供了反馈,让我知道要为 hamcrest 下载什么(hamcrest-core 需要 hamcrest-parent)。但是现在我已经全部下载了,我删除了该行并且构建工作正常。所以下载我需要的东西以及它的依赖项应该可以解决这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 2014-10-07
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多