无法使用 Gradle 在 SpringBoot 闭合中设置 Layout = ZIP



这是我之前提出的一个问题的后续问题。 我正在尝试获得一个可以使用propertiesLauncher的 SpringBoot 构建设置。 根据文档,我需要我们ZIP布局。

因此,当我将以下块添加到gradle时:

springBoot{
layout='ZIP'
}

我在构建时收到以下错误:

无法为 org.gradle.api.Project 类型的根项目"demo"设置只读属性"layout"的值。

* What went wrong:
A problem occurred evaluating root project 'demo'.
> Cannot set the value of read-only property 'layout' for root project 'demo' of type org.gradle.api.Project.
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org

我假设我在这里错过了一些简单的东西。 所以我的问题如下:

1(我需要做什么才能编译它

2(我是否可以使用SpringDependencyManagement插件执行此操作,因为我希望使用Gradle的本机BOM支持

谢谢

示例项目如下: https://github.com/jeeftor/spring-boot-layout

build.gradle看起来像:

plugins {
id 'org.springframework.boot' version '2.1.9.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'org.confused'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
springBoot{
layout='ZIP'
}

当你写:

springBoot{
layout='ZIP'
}

您正在为 springBoot 扩展提供闭包,您在此处编写的任何内容都将针对扩展本身进行解析,或者针对周围的范围(在本例中为 Gradle Project 类(进行解析。

发生的情况是,您尝试设置一个变量layout您希望在扩展中,但事实并非如此。相反,恰好在 GradleProject类上有一个同名的变量。这个变量是只读的,这就是 Gradle 抱怨的原因。当然,这不是您首先打算使用的那个。

所以现在你可能会问为什么 springBoot 扩展中没有文档中所说的layout变量。答案是,您正在查看Spring Boot 1.4的文档,而您使用的是Spring Boot 2.1。如果您转到正在使用的版本的文档,您将看到不再有布局属性。相反,如果您想创建应用程序的 zip 发行版,您可以使用application插件。但这不会让它使用PropertiesLauncher。

Gradle 插件没有任何关于如何使用 PropertiesLauncher 的文档,但如果您使用可执行 jar 格式(您也可以使用可执行 war(,它看起来像这样:

bootJar {
manifest {
attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
}
}

然后,您可以使用java -Dloader.path=path/to/extra/jars -jar demo-0.0.1-SNAPSHOT.jar、环境变量或文档中指定的其他方法之一加载额外的 jar。请注意,如果不进行其他调整,则无法使用bootRun任务,因为它不使用属性启动器。

您还询问了在 Gradle 中使用本机 BOM 支持的问题。您可以删除io.spring.dependency-management插件,改用如下所示的平台依赖项:

dependencies {
implementation platform(group: 'org.springframework.boot', name: 'spring-boot-dependencies', version: '2.1.9.RELEASE')
}

最新更新