我们经常在工作中使用Maven,我们收到错误消息“工件没有有效范围”。经过长时间的谷歌搜索和实验,我意识到这个错误信息意味着什么:工件 具有有效范围,只有太多。
例如,我的主POM仅依赖于superframework v.1.0,但对superframework v.0.5-0.9也存在传递依赖。
到现在为止,每当我遇到这样的问题时,我都会看到(非常神秘的)错误信息并且猜测我需要更改哪个POM - 基本上很多试验都是错误的。问题是如果您有依赖项解决问题,mvn dependency:tree
不起作用。
Eclipse插件有时候有点帮助,但有时候它有点偏离。
有关如何解决这些问题的任何提示?
答案 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行为的一个缺陷?