Maven - 在 Eclipse 中抑制覆盖托管版本警告
Posted
技术标签:
【中文标题】Maven - 在 Eclipse 中抑制覆盖托管版本警告【英文标题】:Maven - Suppress Overriding managed version warning in Eclipse 【发布时间】:2015-08-27 05:55:18 【问题描述】:我正在使用spring-boot
,但遇到了与here 描述的错误类似的错误。我在 pom.xml 中添加了以下内容。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId><!--$NO-MVN-MAN-VER$-->
<version>1.1.0.Final</version>
</dependency>
我正在通过 Spring 引导覆盖在我的父 pom.xml 中定义的 validation-api 1.0.0 依赖项,这会给出令人讨厌的警告消息:
为验证 API 覆盖托管版本 1.0.0.GA
如何在 Eclipse 中永久禁止显示此警告消息?它显示在我的 pom.xml 和问题视图中。
【问题讨论】:
更新给定父 pom 中的版本。 添加评论 对我有用。 感谢您的回复。重新更新父 pom...我不拥有父 pom,它是通过 Spring Boot 继承的。重新添加 也不起作用,但我不知道我是否正确使用它。如果这确实清除了警告,我也想了解更多信息。 如果你使用的是spring-boot,参考:***.com/a/35385268/1568658 【参考方案1】:当该警告出现时,您可以打开警告上的快速修复菜单 (Ctrl+1) 并选择
忽略此警告
这将在版本行添加注释,例如:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version><!--$NO-MVN-MAN-VER$-->
</dependency>
您的问题是您在错误的行上手动添加了该评论。
【讨论】:
这适用于删除 Eclipse 中显示的警告,但我仍然无法构建项目。得到错误:Rule 0: org.commonjava.maven.enforcer.rule.EnforceManagedDepsRule failed with message:The following 2 dependencies are NOT using a managed version
这是解决问题的不好方法,因为它可能会破坏其他库的依赖关系。【参考方案2】:
由于该项目使用spring-boot
,因此可以在这里找到更合适的答案:https://***.com/a/35385268/1568658
(由于我遇到了同样的问题,而且上面的答案也不是很完整。我会在这里添加一个答案。)
问题原因:
spring-boot
定义了许多依赖项及其版本,当您使用 spring-boot
作为父项时,这些依赖项会被继承,并且使用不同版本覆盖其中一个依赖项会收到警告,因为它可能会破坏其他库依赖关系。
解决方案:
在<properties></properties>
之间为该依赖项定义一个属性,以指定版本。
例如
<properties>
<reactor.version>2.5.0.BUILD-SNAPSHOT</reactor.version>
</properties>
如何找到属性名称:
在 IDEA 或 Eclipse 中打开您的pom.xml
。
Ctrl + Click 在<parent>
标签上打开父pom,需要递归点击两次才能最终到达artifactId为spring-boot-dependencies
的pom文件。
打开该 pom 后,搜索您的依赖项,例如 servlet-api
,您可以看到默认版本。
spring 有一个文档解释得比较好:https://spring.io/blog/2016/04/13/overriding-dependency-versions-with-spring-boot
【讨论】:
【参考方案3】:在主 pom 中输入您需要的版本。
此警告表示您正在尝试覆盖在主(***)pom 中定义的工件版本。只需在主 pom 中输入您需要的版本,您甚至不需要在其他 pom 中使用 <version />
来获得此依赖项。
【讨论】:
【参考方案4】:有用!我解决问题。由于模块 pom 文件声明 9.2.12.M0 而 spring-boot 参考 V9.3 。我覆盖了父 pom 文件中的 V9.2。关注“Eric Wang”
【讨论】:
spring-boot使用默认版本,可以在pom文件中声明为元素以上是关于Maven - 在 Eclipse 中抑制覆盖托管版本警告的主要内容,如果未能解决你的问题,请参考以下文章
如何将 maven 托管依赖项复制到 war\web-inf\lib 中,以便我可以在 Eclipse 中以调试模式运行我的 GWT 2.0 应用程序?
为啥 Cobertura 在通过 Eclipse 插件运行时报告 0% 覆盖率?