调试Maven的“工件没有有效范围”

时间:2009-11-02 10:11:00

标签: maven-2

我们经常在工作中使用Maven,我们收到错误消息“工件没有有效范围”。经过长时间的谷歌搜索和实验,我意识到这个错误信息意味着什么:工件 具有有效范围,只有太多。

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

到现在为止,每当我遇到这样的问题时,我都会看到(非常神秘的)错误信息并且猜测我需要更改哪个POM - 基本上很多试验都是错误的。问题是如果您有依赖项解决问题,mvn dependency:tree不起作用。

Eclipse插件有时候有点帮助,但有时候它有点偏离。

有关如何解决这些问题的任何提示?

2 个答案:

答案 0 :(得分:3)

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

我更喜欢使用固定版本(这也会使依赖项冲突解决更容易,请参阅9.4.3. Dependency Version Ranges底部的注释)并密集使用the Dependency Convergence report来管理它们。

答案 1 :(得分:0)

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

所以,如果你包含依赖

superframework [0.5,1.5)

它将获取最新的可用版本,比如1.1。

如果你的传递依赖性进一步下降,包括

superframework [0.5, 1.0)

Maven会产生这种误导性错误,因为它不会选择除已有的1.1以外的任何内容,即使它只能选择0.9而不会产生版本冲突。如果你交换订单,奇怪的是,它可以工作。

我是否正确地认为这是Maven行为的一个缺陷?