spring - 无法使用 Gradle 在 Spring Boot 闭包中设置 Layout = ZIP

标签 spring spring-boot gradle

这是对 previous question 的跟进。我问过。我正在尝试获取一个 SpringBoot build设置,我可以在其中使用 propertiesLauncher .根据documentation我需要给我们 ZIP布局。

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

springBoot{
    layout='ZIP'
}

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

Cannot set the value of read-only property 'layout' for root project 'demo' of type org.gradle.api.Project.


* 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您期望的在扩展中,但不是。相反,恰好有一个 variable with the same name在 Gradle 上 Project类(class)。而且这个变量是只读的,这就是 Gradle 提示的原因。当然,这不是您打算首先使用的那个。

所以现在你可能会问为什么没有 layout如文档中所述,springBoot 扩展中的变量。答案是您正在查看 Spring Boot 1.4 的文档,而您使用的是 Spring Boot 2.1。如果您前往 documentation for the version you are using ,您将看到不再有布局属性。相反,如果您想创建应用程序的 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无需额外调整的任务,因为它不使用 PropertiesLauncher。

您还询问了如何在 Gradle 中使用 native BOM 支持。您可以删除 io.spring.dependency-management插件,而是使用这样的平台依赖项:
dependencies {
    implementation platform(group: 'org.springframework.boot', name: 'spring-boot-dependencies', version: '2.1.9.RELEASE')
}

关于spring - 无法使用 Gradle 在 Spring Boot 闭包中设置 Layout = ZIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414281/

相关文章:

gradle:如何组装 JBoss sar 文件

android - 使用 Android Studio 的 android 项目没有运行配置

java - Spring 3 Java 配置 : Imported @Configuration not enhanced?

java - 在 spring boot 应用程序中获取 Class not Found Exception 错误

java - 仅当没有 Exception 映射时,才会调用 @ExceptionHandler for Error

java - 需要用hibernate dao实现方法保存两个来自不同jsp页面的有外键关系的表

spring-boot - Spring Boot,从Gradle 5的测试中排除依赖项

Spring Batch 为 H2 在 SQL 语句中创建语法错误

java - 已被 CORS 策略阻止 : Response to preflight request doesn't pass

jenkins - 如何使用Jenkins和Gradle正确设置TestNG报告解析