【问题标题】:Maven and spring-boot-dependenciesMaven 和 spring-boot-dependencies
【发布时间】:2016-04-29 22:40:29
【问题描述】:

我有一个 Maven 多模块项目,它在主 pom.xml 中将一些旧版本的 spring-boot-dependencies 设置为父级。所有子模块都从这个主 pom.xml 继承 spring boot 依赖项。

这很好,但是在一个新的子模块(也是多模块)中,我想使用最新的 spring boot 版本,而不更改项目中正在使用的那个(连同所有依赖项)。

有没有办法巧妙地覆盖从父级派生的 Spring Boot 版本(及其所有依赖项)并在子模块中使用不同的版本? 我尝试在所有新模块的子模块的 pom.xml 文件中的 <spring-boot.version> 属性中设置显式版本的 Spring Boot,但没有运气。

【问题讨论】:

    标签: maven spring-boot


    【解决方案1】:

    有没有办法巧妙地覆盖从父级派生的spring boot版本(及其所有依赖项)并在子模块中使用不同的版本?

    没有。当您使用特定版本的 Spring Boot 作为父级(或祖父级等)时,您说的是您要使用的 Spring Boot 版本。

    我尝试在所有新模块的子模块的 pom.xml 文件中的属性内设置显式版本的 spring boot,但没有运气。

    如果这确实有效,您最终会得到来自 Spring Boot 版本 X 的父级配置,例如该版本的 Maven 插件管理以及来自 Spring Boot 版本 Y 的依赖项。这种版本的混合可能会导致奇怪和意外的行为这将很难诊断。

    如果您希望能够像这样混合和匹配版本,则应避免使用 Spring Boot 中的父级,而应导入 spring-boot-dependencies

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    这使您可以完全控制版本,但您必须自己定义任何需要的插件管理。还值得注意的是,您不能从导入的 pom 中覆盖属性。

    【讨论】:

    • 好的,只是为了确保我们在同一页面上 - 所以一个导入替换了 &lt;parent&gt; 标记并进入主 pom.xml(用于旧的 spring boot 依赖项),第二个一个进入新的子模块来覆盖它,对吗?如果将此导入添加到新子模块中很简单,那么第二个更改 - 对主 pom.xml - 似乎相当大......谢谢!
    • 正确。第二个导入将覆盖第一个。或者,您可以在父项中为第一次导入使用一个属性,然后在子项中覆盖该属性。
    猜你喜欢
    • 2019-08-14
    • 2019-07-29
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2018-09-21
    • 2016-03-07
    相关资源
    最近更新 更多