2012-09-21 69 views
1

我是一名在Java中有相当一些经验但对Maven来说全新的学生。为什么Maven需要相同版本的不同依赖关系?

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

但是,代码不适用于我。我花了好几个小时在互联网上寻找解决方案。事实证明,失败的原因是我意外地将球衣服务器和球衣客户端的版本指定为1.14,但泽西 - 琼斯版本为1.9.1。

服务器在开始时不工作,但在某一时刻突然开始工作。 (我不知道这是怎么发生的。)客户从未工作,直到我将jersey-json版本更改为1.14。

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

+1

因为不同的版本可能有不同的API。 – gigadot

回答

2

因为一个取决于另一个或以其他方式具有兼容性问题。这就是依赖管理的全部内容。运行mvn dependency:tree以查看这些库的相互关系。

在这种情况下,看起来泽西图书馆都是作为一个“包”一起发布的 - 而且您需要将这些包中的版本一起使用。请参阅:​​

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

+0

当我指定1)1.14时,'mvn dependency:tree'给出不同的输出2)为每个指定1.14和1.9.1。但是这些不同的输出在一些依赖的版本号中仅有不同,并且对我没有多大意义。 – Haozhun

+0

没有一个适合所有的答案。当使用另一个库的错误版本时,依赖管理/库中断是软件中的常见问题。看来你已经发现某些Jersey组件必须来自同一个发行版“包”。 – noahlz

1

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

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

+0

'相同分布'是什么意思? – Haozhun

+0

“分发”一组软件工件(库,文档,样本)打包在一起并分配了一个版本号。 – noahlz

相关问题