Java 为什么Maven需要相同版本的不同依赖项?
我是一名学生,在Java方面有相当多的经验,但对Maven完全陌生 我试图用jersey服务器和jersey客户端实现一个RESTful服务提供者和客户端。两者都依赖于jersey json,以利用POJO和json之间的自动转换。它们还依赖于我自己实现的服务模型,POJO定义位于该模型中 但是,代码不适合我。我花了好几个小时在互联网上到处寻找解决方案。失败的原因是我意外地将jersey server和jersey client的版本指定为1.14,而将jersey json指定为1.9.1 服务器一开始不工作,但在某个点突然开始工作。(我不知道这是怎么发生的。)在我将jersey json版本更改为1.14之前,客户端从未工作过Java 为什么Maven需要相同版本的不同依赖项?,java,maven,jersey,Java,Maven,Jersey,我是一名学生,在Java方面有相当多的经验,但对Maven完全陌生 我试图用jersey服务器和jersey客户端实现一个RESTful服务提供者和客户端。两者都依赖于jersey json,以利用POJO和json之间的自动转换。它们还依赖于我自己实现的服务模型,POJO定义位于该模型中 但是,代码不适合我。我花了好几个小时在互联网上到处寻找解决方案。失败的原因是我意外地将jersey server和jersey client的版本指定为1.14,而将jersey json指定为1.9.1 服
为什么这些不同的依赖项需要相同的版本?通常来自同一发行版的不同JAR一起测试,并给出相同的版本号
如果您尝试混合使用不同的版本,它可能有效,也可能无效,因为它不是预期或测试的组合。因为一个版本依赖于另一个版本,或者存在兼容性问题。这就是依赖关系管理的全部内容。运行
mvn dependency:tree
,查看这些库之间的关系
在这种情况下,Jersey库似乎都是作为“捆绑包”一起发布的,您需要同时使用这些捆绑包中的版本。见:
请注意,这是Jersey库的一个属性,而不是Maven。因为不同的版本可能有不同的API。
mvn dependency:tree
在我为两个库指定1)1.14时给出了不同的输出2)为每个库指定1.14和1.9.1。但这些不同的输出只是在某些依赖项的版本号上有所不同,对我来说没有多大意义。没有一个万能的答案。当使用另一个库的错误版本时,依赖关系管理/库中断是软件中的一个常见问题。您似乎已经发现,某些Jersey组件必须来自同一版本的“包”。什么是“同一发行版”?“发行版”是指打包在一起并分配了版本号的软件工件集(库、文档、示例)。