在Gradle中,您可以设置依赖约束。它们有 3 大特点:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-tomcat:2.7.18'
constraints {
implementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.84' //upgrades 9.0.83->9.0.84 :)
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-tomcat:2.7.18'
constraints {
implementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.82' // does not downgrade 9.0.83->9.0.82 :)
}
}
dependencies {
// implementation 'org.springframework.boot:spring-boot-starter-tomcat:2.7.18'
constraints {
implementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.84' // does nothing :)
}
}
我希望在 Maven 中复制这些功能。使用
<dependencyManagement>
会选中框 1 和 3,但会降级更高版本,这意味着必须不断清理它。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.82</version> <!-- downgrades 9.0.83->9.0.82 :( -->
</dependency>
</dependencies>
</dependencyManagement>
并且设置版本范围将始终使用该范围内的最高版本
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>[9.0.82,)</version> <!-- always uses latest :( -->
</dependency>
</dependencies>
</dependencyManagement>
我想要的结果:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.82</version> <!-- uses 9.0.83 from parent instead :) -->
</dependency>
</dependencies>
</dependencyManagement>
Maven 中没有真正解决这个问题。
您能得到的最好方法是使用强制执行器规则(带有强制执行器插件),该规则在版本降级的情况下会导致构建失败。