Невозможно установить Layout = ZIP в закрытии SpringBoot с Gradle - PullRequest
0 голосов
/ 16 октября 2019

Это продолжение предыдущего вопроса , который я задал. Я пытаюсь получить настройку сборки SpringBoot, где я могу использовать propertiesLauncher. Согласно документации мне нужен макет ZIP.

Поэтому, когда я добавляю следующий блок в gradle:

springBoot{
    layout='ZIP'
}

я получаю следующую ошибку во время сборки:

Невозможно установить значение read-только свойство 'layout' для корневого проекта 'demo' типа 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

Спасибо,

Пример проекта находится здесь: 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'
}

1 Ответ

1 голос
/ 16 октября 2019

Когда вы пишете:

springBoot{
    layout='ZIP'
}

Вы закрываете расширение springBoot, и все, что вы здесь пишете, будет разрешено как против самого расширения, так и с окружающей областью, являющейся классом Gradle Project. в этом случае.

В результате вы пытаетесь установить переменную layout, которая, как вы ожидаете, находится в расширении, но это не так. Вместо этого просто случается, что в классе Gradle Project есть переменная с тем же именем . И эта переменная только для чтения, поэтому 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'
    }
}

Затем вы можете загрузить дополнительные jar-файлы с помощью java -Dloader.path=path/to/extra/jars -jar demo-0.0.1-SNAPSHOT.jar, переменной среды или одного из других методов, как указано в документации. Обратите внимание, что вы не можете использовать задачу bootRun без дополнительных настроек, так как она не использует PropertiesLauncher.

Вы также спрашивали об использовании встроенной поддержки спецификации в Gradle. Вы можете удалить плагин io.spring.dependency-management и использовать вместо него зависимость от платформы, например:

dependencies {
    implementation platform(group: 'org.springframework.boot', name: 'spring-boot-dependencies', version: '2.1.9.RELEASE')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...