为什么Maven需要相同版本的不同依赖项?

时间:2012-09-21 16:56:29

标签: java maven jersey

我是一名在Java方面有相当经验的学生,但对Maven来说是全新的。

我试图用jersey-server和jersey-client实现RESTful服务提供者和客户端。两者还依赖于jersey-json,以利用POJO和JSON之间的自动转换。它们都依赖于我自己实现的服务模型,POJO定义所在的位置。

但是,代码对我不起作用。我花了几个小时在互联网上寻找解决方案。事实证明失败的原因是我不小心指定版本的jersey-server和jersey-client为1.14,但jersey-json为1.9.1。

服务器在开始时不起作用,但在某些时候突然开始工作。 (我不知道这是怎么发生的。)在我将jersey-json版本更改为1.14之前,客户端从未工作过。

为什么我需要为这些不同的依赖项使用相同的版本?

2 个答案:

答案 0 :(得分:2)

因为一方取决于另一方或有其他兼容性问题。这就是依赖管理的全部意义所在。运行mvn dependency:tree以确切了解这些库之间的相互关系。

在这种情况下,泽西图书馆似乎都作为“捆绑”一起发布 - 您需要将这些捆绑包中的版本一起使用。请参阅:http://jersey.java.net/nonav/documentation/latest/chapter_deps.html

请注意,这是Jersey库的属性,而不是Maven。

答案 1 :(得分:1)

通常会对来自同一分布的不同罐子进行测试并给出相同的版本号。

如果您尝试混合使用不同的版本,它可能会起作用,也可能不起作用,因为它不是预期或测试的组合。