Spring Boot + Spring -Loaded (IntelliJ, Gradle)
Я хочу использовать горячую замену с моим проектом Spring Boot. Как-то я не могу заставить его работать, запустив его в моей среде IDE (IntelliJ), несмотря на то, что этот вопрос рассмотрен . Я просто запускаю класс с помощью моего основного метода с атрибутами VM:
-javaagent:/path/to/jar/springloaded.jar -noverify
Мой вопрос: как мне заставить его работать?: -)
Дополнительный вопрос: как использовать Spring, загруженный с помощью Gradle и IntelliJ. Я считаю неудобным заставить разработчика загружать JAR вручную, поместить его где-нибудь и указать на него с помощью параметра JVM. Есть ли лучший способ (должен ли я настроить свою собственную задачу, которая выполняет задание и запускает ее из моей среды IDE в качестве задачи Gradle)?
Ответы
Ответ 1
Вам необходимо настроить проект, как указано в документации:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-reload-springloaded-gradle-and-intellij-idea
После этого вы должны настроить свою IDE для вывода скомпилированных классов в build/classes/main (с помощью плагина Idea, вы можете настроить outputDir, как указано в приведенной выше ссылке, а затем вызвать gradle idea
, чтобы сделать это),
Затем, если вы запустите задачу (run/bootRun) или запустите основной класс из среды IDE, используя режим отладки, перезагрузка горячего кода должна работать, когда класс скомпилирован.
В результате здесь IntelliJ, в отличие от Eclipse, автоматически не компилирует класс при его сохранении (даже если вы сконфигурируете компилятор на "Build on save", он не будет делать этого при запуске/отладке), Это, по-видимому, дизайн-детекция, сделанная IntelliJ - как указано здесь Intellij IDEA Java-классы не автокомпилируются при сохранении (ответ CrazyCoder).
Было бы идеально, если бы spring boot предоставил конфигурационный параметр для контроля ваших файлов исходного кода и перекомпиляции их при их изменении - это то, что делает Grails. Но я думаю, что такого мышления пока не существует, и, возможно, даже невозможно объединить это с gradle, который отвечает за управление путём классов и такими вещами.
Так что, насколько я могу сказать, есть два варианта:
- Помните, что вы скомпилируете все, что вы редактируете (добавление более простой компиляции, как было предложено в предыдущей ссылке StackOverflow).
- Вы помещаете некоторый монитор файловой системы (inotify-tools для Linux, launchd для Mac OS X), который вызывает gradle compileJava/compileGroovy, когда обнаружение изменений обнаруживается в любом файле исходного кода.
Сначала утомительно, второй медленный:). На самом деле есть еще один вариант: вы меняете IDE: -D (или устанавливаете плагин EclipseMode IntelliJ).
Ответ 2
Если вы хотите иметь возможность запускать приложение исключительно из IntelliJ (используя правый щелчок → Отладка по основному методу) и вообще не включать задачи Spring Boot Gradle, вам просто нужно сделать следующее:
- Настройте конфигурацию запуска в IntelliJ для использования агента SpringLoaded. Это легко сделать, и пример показан на следующем снимке экрана:
![enter image description here]()
Обратите внимание, как я добавил VM Option
: -javaagent:/path/to/springloaded-${version}.jar -noverify
(который вы можете скачать здесь)
- Отладка с помощью правой кнопки мыши → Отладка, как показано на следующем снимке экрана:
![enter image description here]()
- Каждый раз, когда вы делаете изменения и хотите перезагрузить его, просто скомпилируйте проект. Ярлык по умолчанию - Cntrl + F9, но вы также можете получить к нему доступ из меню
Build
→ Make Project
Ответ 3
Мне удалось сделать это с помощью IDEA в проекте Maven, он должен работать с версией Gradle, как я полагаю, моя процедура была следующей.
- Настройки → Компилятор → Сделать проект автоматически (работает только при отсутствии/отладки!)
- Запустите проект с помощью плагина sprint-boot-out вне IDE (трюк из-за вышеприведенного предложения).
Настройка плагинов Maven выглядит следующим образом:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Теперь измените код и перезагрузите страницу.
Ответ 4
Я запускаю SpringBoot и Gradle в IntelliJ Idea. Автоматическая перезагрузка работает на 100%
- Статическое содержимое автоматически загружается (мгновенно)
- Thymeleaf автоматически загружается (мгновенно)
- Контроллеры/файлы Java требуют, чтобы я нажал кнопку "build" (занимает несколько секунд), но не требует перезапуска - просто для компиляции файлов, поэтому Spring Loaded может их забрать.
Шаг 1: Получить SpringLoaded
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE"
classpath 'org.springframework:springloaded:1.2.1.RELEASE'
}
}
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'
apply plugin: 'spring-boot'
repositories {
jcenter()
mavenLocal()
mavenCentral()
}
mainClassName = 'com.noxgroup.nitro.NitroApp'
idea {
module {
inheritOutputDirs = false
outputDir = file("$buildDir/classes/main/")
}
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.1.RELEASE")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
}
jar {
baseName = 'org.noxgroup-nitro'
version = '0.1.0'
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
Шаг 2: Создайте Application.properties
И добавьте следующее:
spring.thymeleaf.cache=false
Шаг 3. Запустите задачу bootRun
(Не только стандартная задача запуска - это добавляет функциональность SpringLoaded)
Шаг 4: Скомпилируйте Java
Сделайте ваши файлы Java, нажав "Сделать проект" или нажав "Ctrl/Command + F9
Ответ 5
В более поздних версиях gradle вы можете запустить командное окно и запустить
gradle -t classes
Это запустит процесс, который ищет изменения исходного кода и перекомпилирует их.
В другом прогоне.
gradle bootRun
Любые изменения в java или groovy src будут автоматически переупорядочены. Хотя это и неинтеллектуально, вам хорошо идти с intellij. Вы даже можете обойтись с любимым текстовым редактором (например, submlime, atom).
кредиты/ссылка