Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有任何理由在Maven中为我自己的可传递依赖项保留显式依赖项声明?_Java_Maven_Dependencies - Fatal编程技术网

Java 是否有任何理由在Maven中为我自己的可传递依赖项保留显式依赖项声明?

Java 是否有任何理由在Maven中为我自己的可传递依赖项保留显式依赖项声明?,java,maven,dependencies,Java,Maven,Dependencies,我已经阅读了一段关于Maven中显式与传递(隐式)依赖关系声明的文章。大多数人倾向于同意,您应该始终明确声明项目所依赖的库,主要是为了避免版本不匹配 这是完全合理的,但是我们应该如何处理我们的内部依赖关系呢?我认为绝对没有理由保持模块之间的显式依赖关系,如果它们可以通过传递机制解决的话 我的用例场景: 我的团队在major.minor.micro发布周期中开发软件,例如:1.1.1、1.1.2、1.3.0等 在每个版本中,我们增加了项目中所有模块的版本控制方案(因此A:1.0,B:1.0变成了

我已经阅读了一段关于Maven中显式与传递(隐式)依赖关系声明的文章。大多数人倾向于同意,您应该始终明确声明项目所依赖的库,主要是为了避免版本不匹配

这是完全合理的,但是我们应该如何处理我们的内部依赖关系呢?我认为绝对没有理由保持模块之间的显式依赖关系,如果它们可以通过传递机制解决的话

我的用例场景:

  • 我的团队在
    major.minor.micro
    发布周期中开发软件,例如:1.1.1、1.1.2、1.3.0等
  • 在每个版本中,我们增加了项目中所有模块的版本控制方案(因此A:1.0,B:1.0变成了A:1.1,B:1.1)
  • 我们使用的是反应堆项目,嵌套深度达两层
我的直觉告诉我——摆脱对意大利面条的依赖。有人会证明我错了吗?反应器(依赖项)图非常受欢迎:-)

例如: 我的父项目使用以下模块(省略外部依赖项):

问题是:我是否应该在
core
logic
的pom.xml中将
xmlhelper:1.1
声明为依赖项?当我使用
util
模块时,该依赖关系将被自动解析(可传递)

如果我声明它,我会得到一个更大的pom来维护


如果我跳过它,当依赖关系随着时间的推移而演变时,我可能会遇到麻烦。

这里有几个问题,所以我将尝试全部回答

这是完全合理的,但我们应该如何处理我们的内部问题呢 依赖关系

看起来您有一个基于模块的项目。为了缓解版本冲突,我建议使用以下两种可能性之一:

  • 将公共依赖项放入父模块中
    dependencyManagement
    部分,并使用属性 版本
  • 使用基本pom,并将依赖项放入其
    依赖关系管理
    部分
  • 查看答案以了解更多信息

    我的直觉告诉我——摆脱对意大利面条的依赖。任何人 会证明我错了吗

    我认为这是一个主观的问题,但我还是会给出我的意见

    不,我认为你走对了方向。我并不完全赞同“如果正在使用可传递依赖项,就声明它们”的观点。使用maven的最大好处之一是可以获得可传递的依赖项。如果您必须为所使用的一切声明依赖项,我可以想象您的POM将很快变成无法管理的野兽

    问题是:我应该将XMLHelper:1.1声明为中的依赖项吗 core和logic的pom.xml

    同样,我倾向于使用
    dependencyManagement
    ,而不是在每个pom中使用声明


    我希望这有帮助

    你能给出一个pom文件场景的例子吗,或者可能是在github上创建一个示例项目或类似的东西。我在描述中添加了一个非常基本的示例。我忘了添加我们当然使用父pom中的依赖项管理部分:-)问题纯粹是关于声明可传递的依赖项。现在我想起来了,还有一点是反对的。如果像
    core
    这样的顶级模块只使用了
    xml helper
    中的一种实用方法,并且该方法在某个时候从项目中删除了,那么在POM中,模块之间仍然有很强的依赖性,不再有任何共同之处。这使得管理更加困难,只能通过
    依赖关系:分析
    目标来获得。@ukaszBachman如果上面的答案有用,请接受它,或者启动bounty以注意接收更多答案。
    
    Project:1.1   
     - core:1.1
     - +-- util:1.1 
     -   +-- xml-helper:1.1
     - logic:1.1
     - +-- util:1.1 
     -   +-- xml-helper:1.1
     - gui:1.1