如何覆盖spring boot BOM的版本

Posted

技术标签:

【中文标题】如何覆盖spring boot BOM的版本【英文标题】:How to overwrite version of spring boot BOM 【发布时间】:2022-01-19 14:38:32 【问题描述】:

我在更新 Log4j 版本时遇到问题。在我的pom.xml 文件中,我更新了这样的版本:

<properties>
        // other stuff //
        <org.apache.logging.log4j.version>2.16.0</org.apache.logging.log4j.version>
    </properties>

但在依赖项中:

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>org.apache.logging.log4j.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>org.apache.logging.log4j.version</version>
        </dependency>

版本抛出一个错误,它从 BOM 文件覆盖到 2.11.1。我在哪里可以更新我的pom 以导入 2.16.0 版本的 BOM 文件?

【问题讨论】:

【参考方案1】:

我想你可以试试这个来覆盖 spring-boot bom。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>2.16.0</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        ... other dependencies including spring-boot-dependencies
    </dependencies>
</dependencyManagement>

【讨论】:

【参考方案2】:

不好/没有效果(可能是 log4j1):

<org.apache.logging.log4j.version>2.16.0</org.apache.logging.log4j.version>

更好

(对于 spring-boot-parent-based [2-2.6.1]/spring-dependeny-managed):

<log4j2.version>2.16.0</log4j2.version>

;)

Link

【讨论】:

更改标签后出现其他错误。我在 pom 的插件部分得到了这个:'build.pluginManagement.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-surefire-plugin 这个(最新的)是一个“简单的修复”! (只需阅读错误消息:“发现插件的重复声明..surefire..”) sry 复制到错误的一个,我管理了那个,我用这个有问题:Plugin could not be resolved. Ensure the plugin's groupId, artifactId and version are present. Additional information: Plugin org.jacoco:jacoco-maven-plugin:0.8.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.jacoco:jacoco-maven-plugin:jar:0.8.3 uff,这更难(并且可能不相关)see here ..它可能是(临时/永久)网络问题,或者您的“公司(maven)存储库”......如果一切都失败了:只需下载它(到本地 maven repo (~/.m2/repository))【参考方案3】:

所以这两个答案都帮助我找到了解决问题的方法。问题是在我的dependency 中,我没有为我的version 标签添加$ 符号。所以有了这行代码,它现在可以工作了:&lt;version&gt;$org.apache.logging.log4j.version&lt;/version&gt;

【讨论】:

以上是关于如何覆盖spring boot BOM的版本的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot BOM 管理 Maven 插件版本

Gradle 5 JUnit BOM 和 Spring Boot 版本不正确

如何覆盖 Spring Boot 依赖项默认版本?

如何完全覆盖spring boot starter的版本?

spring boot 实践总结(转)

8.如何统一引入Spring Boot的版本?