Maven 2 调试Maven';s";工件没有有效的范围“;

Maven 2 调试Maven';s";工件没有有效的范围“;,maven-2,Maven 2,我们经常在工作中使用Maven,我们会收到错误消息“工件没有有效范围”。经过长时间的谷歌搜索和实验,我意识到了这个错误消息的含义:工件确实有有效的范围,只是太多了 例如,我的主POM仅依赖于superframework v.1.0,但也存在对superframework v.0.5-0.9的可传递依赖 直到现在,每当我遇到这样的问题时,我都会查看(非常隐晦的)错误消息,并猜测我需要更改哪个POM——基本上是一个错误。问题在于,如果存在依赖项解决问题,mvn-dependency:tree将无法工

我们经常在工作中使用Maven,我们会收到错误消息“工件没有有效范围”。经过长时间的谷歌搜索和实验,我意识到了这个错误消息的含义:工件确实有有效的范围,只是太多了

例如,我的主POM仅依赖于superframework v.1.0,但也存在对superframework v.0.5-0.9的可传递依赖

直到现在,每当我遇到这样的问题时,我都会查看(非常隐晦的)错误消息,并猜测我需要更改哪个POM——基本上是一个错误。问题在于,如果存在依赖项解决问题,
mvn-dependency:tree
将无法工作

Eclipse插件有时会有一些帮助,但有时却远远不够


关于如何解决这些问题有什么建议吗?

这可能不是预期的答案,但我的建议是实际使用依赖范围,因为它们会恶化构建再现性


我更喜欢使用固定版本(这也使依赖项冲突的解决变得更容易,请参阅底部的注释),并集中使用它们来管理它们。

这不是对我问题的直接回答,而是一条建议。自从问了这个问题之后,我学到了一些新的东西:令我惊讶的是,POM文件中列出依赖项的顺序确实很重要

因此,如果您包含对

superframework [0.5,1.5)
它将获取可用的最新版本,比如1.1

如果你有一个向下的可传递依赖,包括

superframework [0.5, 1.0)
Maven将产生这种误导性错误,因为它不会选择除1.1之外的任何内容,即使它只选择0.9而不会产生版本冲突。奇怪的是,如果你交换订单,它就会起作用


我认为这是Maven行为中的一个缺陷,对吗?

谢谢你的回答;我会努力在工作中把这个词说出来。答案中的链接似乎不再有效,新的链接是:这可能与Maven解决依赖关系(和冲突)的方式有关,请参阅。另一个不使用范围IMHO的好理由。