我想我的依赖dependencyManagement
块继承从一个版本spring-boot-parent
的dependencyManagement
块,但增加排斥它,这样我就不必指定每个儿童模块排除。
我的父 pom 继承自 spring-boot-parent:
<artifactId>my-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>???</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
子 pom 继承my-parent
:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法:
当我替换???
为 时${parent.version}
,在子模块中,此版本被解析为my-parent
's version: 1.0.0-SNAPSHOT
,这是不正确的。
当我用 替换???
时${parent.parent.version}
,maven 会中断,因为它不支持此类属性
我可以修复???
是2.0.1.RELEASE
,这将正常工作,但如果我更新春天启动的版本,我记得更新这种依赖性也的版本,这是不直观
我无法提取2.0.1.RELEASE
作为属性my-parent
并将该属性用作父版本,因为 maven 不支持。
我可以使用具有2.0.1.RELEASE
从spring-boot-parent
pom继承的值的属性,但据我所知,没有这样的属性。
有没有一种很好的方法来实现我想要的?
请参阅是否可以将父版本作为属性提供给子项?- 用于声明父级的版本不能以“将此引用固定为表示其在图中此时的解释”的方式重新调整用途。字符串是字符串,占位符是占位符;没有内置的设施来进行某种中间的事情。如果父级使用属性来定义依赖项版本,您可以引用该属性;如果它使用固定字符串(如您的情况),那么您需要重复某些内容才能定义排除。正如链接问题中所提到的,常见的方法是这样的:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<properties>
<spring.boot.version>2.0.1.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
...
Run Code Online (Sandbox Code Playgroud)
您仍然必须在两个字段中重复该值 - 因此您必须确保始终保持这些字段同步(父版本和属性)。
然而,越来越流行的管理方法是在 BOM(“物料清单”pom,其特定目的是保持一组组件对齐)中声明这些版本。然后这些dependencyManagement
东西就可以被导入而不是继承。Spring Boot 这样做已经有一段时间了;事实上,您示例中的父级实际上并未声明依赖项本身,它们来自不同的工件。因此,您可以做这样的事情,而不是从父级继承(我可能有这些向后的顺序——我不记得是第一个还是最后一个获胜):
<properties>
<spring.boot.version>2.0.1.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
...
Run Code Online (Sandbox Code Playgroud)
...现在,如果您想继承其他原因(除了 dep mgmt 之外),spring-boot-starter-parent
那么这不会真正帮助您解决问题;您仍然需要复制。但我怀疑,随着你的项目的成熟,你无论如何都会希望有一个自己设计的父母。
归档时间: |
|
查看次数: |
2210 次 |
最近记录: |