Maven 和 Spring Boot 依赖项

3
我有一个 Maven 多模块项目,在主 pom.xml 中设置了一些旧版本的 spring-boot-dependencies 作为父级。所有子模块都从这个主 pom.xml 继承 spring boot 依赖项。
这很好,但在其中一个新的子模块中(也是多模块),我想使用最新的 spring boot 版本,而不改变整个项目中正在使用的版本(以及所有依赖项)。
有没有一种聪明的方式可以覆盖从父级继承的 spring boot 版本(及其所有依赖项),并在子模块中使用不同的版本? 我尝试在所有新模块的子模块的 pom.xml 文件中设置显式的 spring boot 版本 属性,但没有成功。
1个回答

6
有没有一种巧妙的方法可以覆盖来自父级的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中继承的属性。

好的,只是为了确保我们在同一页面上 - 所以一个导入替换了<parent>标签并进入主pom.xml(用于旧的Spring Boot依赖项),第二个导入则进入新的子模块以覆盖它,对吗?如果将此导入添加到新的子模块中很简单,则对主pom.xml进行的第二个更改似乎相当大...谢谢! - m52509791
正确。第二个导入将覆盖第一个。或者,您可以在父级中为第一个导入使用属性,然后在子级中覆盖该属性。 - Andy Wilkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接