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 作为父项时,这些依赖项会被继承,并且使用不同版本覆盖其中一个依赖项会收到警告,因为它可能会破坏其他库依赖关系。

解决方案:

&lt;properties&gt;&lt;/properties&gt; 之间为该依赖项定义一个属性,以指定版本。

例如

        <properties>
            <reactor.version>2.5.0.BUILD-SNAPSHOT</reactor.version>
        </properties>

如何找到属性名称:

在 IDEA 或 Eclipse 中打开您的 pom.xmlCtrl + Click&lt;parent&gt;标签上打开父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 中使用 &lt;version /&gt; 来获得此依赖项。

【讨论】:

【参考方案4】:

有用!我解决问题。由于模块 pom 文件声明 9.2.12.M0 而 spring-boot 参考 V9.3 。我覆盖了父 pom 文件中的 V9.2。关注“Eric Wang”

【讨论】:

spring-boot使用默认版本,可以在pom文件中声明为元素org.springframework.bootspring-boot-dependencies1.5.1.RELEASEpomimport dependencyManagement> ,您应该声明自己的版本以覆盖默认版本。

以上是关于Maven - 在 Eclipse 中抑制覆盖托管版本警告的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven 中覆盖托管版本

如何在 Eclipse 中处理 Maven WAR 覆盖?

如何将 maven 托管依赖项复制到 war\web-inf\lib 中,以便我可以在 Eclipse 中以调试模式运行我的 GWT 2.0 应用程序?

为啥 Cobertura 在通过 Eclipse 插件运行时报告 0% 覆盖率?

如何在 Eclipse/PyDev 中抑制“未使用的变量”警告

jacoco + eclipse单元测试覆盖率