2013-07-10 102 views
1

当我尝试建立在Eclipse我的Maven项目解决依赖过时的版本,我得到这个构建失败消息:Maven的依赖版本不匹配的问题 - 从回购

[INFO] Checking for transitive/resolved version mismatches. 
[INFO] com.company.etc:artifact-name: 
[INFO]  required: 1.5 
[INFO]  resolved: 1.3 

我的POM文件被请求版本1.5这个神器的东西,所以这部分是正确的。但是在列出的版本库中,版本1.3,1.4和1.5都是可用的,并且在根目录中也有正确的maven-metadata.xml文件。只是将我的POM文件要求更改为旧版本不是一种选择,因为我需要最新版本的工件中的功能。

我真的很难过。有什么我可以忽略的,可能会导致Maven 解析比实际可用的回购服务器更低的版本号?

+0

这不是构建失败消息,它是一条信息消息。这并不妨碍你的构建。另外,在某些情况下选择较低版本是标准的maven行为 - 它使用闭合优先匹配,如果最接近匹配则采用较低版本。你能指定你的pom吗? – eis

+0

我想我应该指定 - 如果版本不匹配,我将它设置为失败。有无论如何选择更高版本? –

+0

是的,通过在正确的地方显示pom文件的版本。但是您需要提供您的pom详细信息以告诉您更详细的说明。 – eis

回答

4

有迹象表明,我发现这个问题有两个可能的解决方案:

第一个是指定一个确切的版本要求,或“硬需求”为依赖的特定版本,如下图所示:代替

<version>[1.5]</version> 

<version>1.5</version> 

第二个是使用Maven命令mvn dependency:tree准确查看正在引入哪些依赖关系以及哪些层次结构。在我的情况下,这解决了我的问题,当我注意到一个依赖实际上牵扯到另一个依赖的老版本时,作为子依赖。尽管子依赖在POM的其他地方被指定,但Maven使用了作为子依赖的旧版本。听起来令人困惑,我知道,但无论哪种方式,mvn dependency:tree应显示是否在不知不觉中或在未指定的版本拉取依赖项。