使用 Gradle 5.1 "implementation platform" 而不是 Spring 依赖管理插件
Using Gradle 5.1 "implementation platform" instead of Spring Dependency Management Plugin
我写了一个 Gradle 插件,其中包含一堆常见的设置配置,因此我们所有的项目只需要应用该插件和一组依赖项。它使用 Spring 依赖管理插件为 Spring 设置 BOM 导入,如下面的代码片段所示:
trait ConfigureDependencyManagement {
void configureDependencyManagement(final Project project) {
assert project != null
project.apply(plugin: "io.spring.dependency-management")
final DependencyManagementExtension dependencyManagementExtension = project.extensions.findByType(DependencyManagementExtension)
dependencyManagementExtension.imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE"
}
}
}
虽然这在 Gradle 5.1 中仍然有效,但我想用 BOM 导入的新依赖机制替换 Spring 依赖管理插件,所以我将上面的内容更新为:
trait ConfigureDependencyManagement {
void configureDependencyManagement(final Project project) {
assert project != null
project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
}
}
不幸的是,更改意味着 none 由这些 BOM 定义的依赖项正在导入,我在构建项目时遇到这样的错误?
Could not find org.springframework.boot:spring-boot-starter-web:.
Required by:
project :
Could not find org.springframework.boot:spring-boot-starter-data-jpa:.
Required by:
project :
Could not find org.springframework.boot:spring-boot-starter-security:.
Required by:
project :
我认为 Gradle 5.1 不再需要 Spring 依赖管理插件是正确的吗?如果是这样,那么我是否遗漏了一些让它起作用的东西?
Gradle 5 中的平台支持可以替代 Spring 依赖管理插件来使用 BOM。但是,Spring 插件提供的功能未包含在 Gradle 支持中。
关于您的问题,问题来自以下行:
project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
这只会创建一个 Dependency
,它仍然需要添加到配置中。通过做类似的事情:
def platform = project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
project.dependencies.add("configurationName", platform)
其中 configurationName
是需要 BOM 的配置的名称。请注意,您可能需要将此 BOM 添加到多个配置中,具体取决于您的项目。
我写了一个 Gradle 插件,其中包含一堆常见的设置配置,因此我们所有的项目只需要应用该插件和一组依赖项。它使用 Spring 依赖管理插件为 Spring 设置 BOM 导入,如下面的代码片段所示:
trait ConfigureDependencyManagement {
void configureDependencyManagement(final Project project) {
assert project != null
project.apply(plugin: "io.spring.dependency-management")
final DependencyManagementExtension dependencyManagementExtension = project.extensions.findByType(DependencyManagementExtension)
dependencyManagementExtension.imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE"
}
}
}
虽然这在 Gradle 5.1 中仍然有效,但我想用 BOM 导入的新依赖机制替换 Spring 依赖管理插件,所以我将上面的内容更新为:
trait ConfigureDependencyManagement {
void configureDependencyManagement(final Project project) {
assert project != null
project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
}
}
不幸的是,更改意味着 none 由这些 BOM 定义的依赖项正在导入,我在构建项目时遇到这样的错误?
Could not find org.springframework.boot:spring-boot-starter-web:. Required by: project :
Could not find org.springframework.boot:spring-boot-starter-data-jpa:. Required by: project :
Could not find org.springframework.boot:spring-boot-starter-security:. Required by: project :
我认为 Gradle 5.1 不再需要 Spring 依赖管理插件是正确的吗?如果是这样,那么我是否遗漏了一些让它起作用的东西?
Gradle 5 中的平台支持可以替代 Spring 依赖管理插件来使用 BOM。但是,Spring 插件提供的功能未包含在 Gradle 支持中。
关于您的问题,问题来自以下行:
project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
这只会创建一个 Dependency
,它仍然需要添加到配置中。通过做类似的事情:
def platform = project.dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
project.dependencies.add("configurationName", platform)
其中 configurationName
是需要 BOM 的配置的名称。请注意,您可能需要将此 BOM 添加到多个配置中,具体取决于您的项目。