当我们已经使用 id “org.springframework.boot” 插件时,我们是否需要 “io.spring.dependency-management” gradle 插件

arj*_*dev 8 java gradle spring-boot

将 spring-boot 插件添加到 Gradle 项目时会发生什么?为什么我们还需要明确包含 spring.dependency-management 插件。?

plugins {
    id "org.springframework.boot" version "2.1.5.RELEASE"
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*hil 12

为什么使用 Spring Boot Gradle 插件

\n\n

解释一下Spring Boot Gradle 插件参考指南

\n\n
\n

Spring Boot Gradle 插件在 Gradle 中提供 Spring Boot 支持。它允许您打包可执行的 jar 或 war 档案,运行 Spring Boot 应用程序,并使用 spring-boot-dependencies 提供的依赖项管理。

\n
\n\n

需要注意的关键点是,除了提供 Spring Boot 支持之外,它还允许通过 spring-boot-dependency 使用依赖管理。但...

\n\n

为什么使用 Spring 依赖管理插件

\n\n

spring-boot-dependency BOM 支持依赖管理。

\n\n

意思是:

\n\n
    \n
  1. 如果您省略声明的依赖项的版本:
  2. \n
  3. 并且它是一个托管依赖项(即在 BOM 中列出版本):
  4. \n
  5. 然后(如果你应用了 spring-boot-dependency 插件)你就可以像 Maven 一样享受依赖管理
  6. \n
\n\n

要获取项目中的依赖项 bom,您必须将依赖项管理插件与 Spring boot gradle 插件配合应用。再次转述一下

\n\n
\n

当您应用 io.spring.dependency-management 插件时,Spring\n Boot\xe2\x80\x99s 插件将自动从您正在使用的 Spring Boot 版本导入 spring-boot-dependency\n bom。

\n
\n\n

为什么选择其中之一?

\n\n

如果您需要 Spring Boot 支持,那么您需要该插件。

\n\n

此外,如果您需要托管依赖项(如上所述),则需要依赖项管理插件。

\n\n

具有依赖性约束的另一种方法

\n\n

依赖管理插件是导入 Spring Boot 物料清单 (BOM) 的一种方法。

\n\n

另一种方法(Gradle 5 及更高版本支持)是从 BOM 导入推荐的依赖项版本作为 Gradle 中的依赖项约束。“平台”(依赖处理程序方法)用于导入 BOM。

\n\n
dependencies {\n    // Load BOM for Spring Boot.\n    implementation(platform("org.springframework.boot:spring-boot-dependencies:2.3.0.RELEASE"))\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用任何一种依赖管理方式,您都可以指定依赖项而无需显式版本,如下所示:

\n\n
dependencies {\n    implementation \'org.springframework.boot:spring-boot-starter-data-mongodb\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n


小智 9

由于 Gradle 5+支持 BOM文件,您不再需要依赖管理插件。仍然需要 spring boot 插件来提供bootJar和等任务bootRun。这是一个应该可以工作的最小 build.gradle:

buildscript {
    ext {
        springBootVersion = '2.2.4.RELEASE'
    }
}

repositories {
    mavenCentral()
}

plugins {
    id 'java'
    id 'org.springframework.boot' version "${springBootVersion}"
}

dependencies {
    implementation platform("org.springframework.boot:spring-boot-dependencies:${springBootVersion}")
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 根据我处理大型多项目构建的经验,添加两点支持使用 BOM 而不是 gradle 插件:(1) 使用 BOM 的依赖项解析速度要快得多,在某些情况下超过 90%。(2) 依赖管理插件为其管理的依赖创建“分离的配置”。这使得跟踪依赖关系的解决方式变得更加困难。 (2认同)

lar*_*fer 5

迁移指南对此给出了一些提示:

\n\n
\n

Spring Boot\xe2\x80\x99s Gradle 插件不再自动应用依赖管理插件。相反,Spring Boot\xe2\x80\x99s 插件现在通过导入正确版本的 spring-boot-dependency BOM 来对所应用的依赖项管理插件做出反应。这使您可以更好地控制依赖管理的配置方式和时间。

\n\n

对于大多数应用程序,应用依赖管理插件就足够了:

\n\n
apply plugin: \'org.springframework.boot\'\napply plugin: \'io.spring.dependency-management\' // <-- add this to your build.gradle\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意: \n 依赖管理插件仍然是 spring-boot-gradle-plugin 的传递依赖项,因此 \xe2\x80\x99s 不需要将其在构建脚本配置中列为类路径依赖项。

\n
\n\n

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#dependency-management

\n