IntelliJ 15, SpringBoot devtools livereload не работает
У вас возникли проблемы с новой функцией LiveReload с помощью Spring Boot devtools 1.3. Он не перезагружает изменения класса. Я видел его demo'd с IntelliJ @Devoxx 2015. Есть ли некоторые IDE настройки, которые мне нужно включить? Я бегу через IDE, а не через Gradle. Я попытался включить "Сделать проект автоматически", который, похоже, не помогает.
Кажется, правильно загружается и ищет правильный путь
2015-11-23 05:55:30.592 DEBUG 4700 --- [ restartedMain] o.s.boot.devtools.restart.Restarter : Starting application com.myapp.Application with URLs [file:/E:/Projects/myapp/build/classes/main/, file:/E:/Projects/myapp/build/resources/main/]
Мои файлы
build.gradle
buildscript {
ext {
springBootVersion = '1.3.0.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'
war {
baseName = 'myapp'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
configurations {
providedRuntime
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-devtools')
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-web')
compile('net.sourceforge.jtds:jtds:1.3.1');
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-starter-parent:Brixton.M3"
}
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.7'
}
HelloWorldController
@Controller
public class HelloWorldController {
@RequestMapping("/")
@ResponseBody
String home(){
return "Hello World test";
}
}
Ответы
Ответ 1
Я предполагаю, что вы кодируете и ожидаете, что DevTools автоматически узнает, что вы что-то изменили в своем проекте? Devtools делает это, наблюдая за вашими папками пути. Когда файл .class
(или ресурс) был изменен, devtools принимает действие appopriate.
Если вы ничего не видите, возможно, потому, что вы просто кодируете и не обновляете путь к классам. Вы должны вызвать Make Project для обновления пути к классам. См. документацию
Ответ 2
Для решения этой проблемы вы можете сделать следующее:
- Добавьте расширение LiveReload в свой браузер.
- Добавьте зависимости devtools в ваш pom.xml (если он maven (spring-boot-devtools)).
- В вашем intellij IDEA перейдите: file-> настройки-> сборка, выполнение, развертывание. Перейти к → compiler-> автоматически построить проект.
- В вашей интеллектуальной IDEA: SHIFT + Ctrl + A → registry-> compiler.automake.allow.when.app.running
Ответ 3
если вы используете IntelliJ IDEA, добавления spring-boot-devtools
недостаточно. Это связано с тем, что, в отличие от Eclipse, вам необходимо явно указать IntelliJ IDEA "Сделать проект", чтобы он создавался в целевом пути к классам.
смотрите на YouTube
Самое простое решение: запустить режим отладки приложения и нажать Ctrl + f9
(ярлык для сборки)
или
- Вам необходимо включить опцию "Сделать проект автоматически". Ты можешь
найдите его в Настройках - Сборка, Выполнение, Развертывание - Компилятор
- Чтобы открыть реестр, просто нажмите SHIFT + CTRL + A. В реестре
окно, включите "compiler.automake.allow.when.app.running"
Флажок.
![build-project-automatically]()
![compiler-automake-allow-when-app-running]()
Ответ 4
LiveReload и перезагрузка - это разные функции. Livereload позволяет обнаруживать изменения в папке resources/static
и уведомлять браузер об изменении файлов и перезагрузке страницы.
Ваш вопрос описывает сценарий перезапуска. Если вы хотите, чтобы ваше приложение автоматически перезагружалось при изменениях *.class файлов, убедитесь, что ваша среда IDE выдает скомпилированные классы следующим образом:
build\classes\main
В Intellij перейдите в Структуру проекта (Ctrl + Alt + Shift + S) и установите выходной каталог компилятора проекта. После этого вы можете внести изменения в свои классы и нажать Ctrl + Shift + F9, чтобы перекомпилировать текущий класс, или нажать Ctrl + F9, чтобы перекомпилировать весь проект. Spring Boot Devtools обнаружит изменения в build\classes\main
и автоматически выполнит перезапуск приложения.
Если вы хотите включить LiveReload для статических ресурсов, добавьте следующее (иначе вы не увидите последовательности статического содержимого при выполнении цели bootRun):
bootRun {
addResources = true
}
Ответ 5
Выполните следующие простые шаги, и вы сможете начать работу менее чем за 2 минуты.
- Нажмите Ctrl + Shift + A
- Поиск реестра...
- прокрутите и найдите "compiler.automake.allow.when.app.running", затем установите флажок, чтобы сделать его активным.
- Нажмите закрыть
- Меню Файл → Настройки...
- Развернуть Построение, Выполнение, Развертывание
- Выберите компилятор
- Установите флажок Автоматически строить проект
- Применить
- Нажмите Ok
Теперь остановите сервер приложений, а затем запустите приложение, чтобы вы автоматически включили его перезагрузку/перезагрузку при обнаружении любых изменений в проекте.
Удачного кодирования/взлома.
Ответ 6
Из документации здесь
Поскольку DevTools контролирует ресурсы класса pathpath, единственным способом запуска перезапуска является обновление пути к классам. Способ, которым вы вызываете обновление класса, зависит от используемой среды IDE. В Eclipse сохранение измененного файла приведет к обновлению пути к классам и вызову перезапуска. В IntelliJ IDEA создание проекта (Build → Make Project) будет иметь тот же эффект.
Ответ 7
Чтобы ответить на поставленный выше вопрос, давайте сначала разберемся с особенностью Intellij Idea. Вы, должно быть, видели, что файл, который вы вносите, не нужно сохранять. И изменения, которые вы вносите в любой файл не .class, сохраняются. Для перекрестной проверки внесите некоторые изменения в файл .java (вы также можете выбрать любой другой файл) и закройте его, и он не будет запрашивать его сохранение, и когда вы снова откроете файл, ваши изменения все еще там.
Но если вы проверите файл .class, сделанные изменения не будут отражены, что очевидно, потому что сборка не произошла.
Напротив, когда мы включаем автоматическую сборку в Eclipse, это делается для события, а событие - Сохранение файла → Ctrl + S (Windows). Но в интеллигентной идее это событие не происходит, или мы не осуществляем это событие.
итак, рассмотрим сценарий, когда у нас нет spring-boot-devtool, тогда, в этом случае, нам всегда приходилось перестраивать или перезагружать сервер, чтобы получить изменения, которые вызвали событие.
теперь, что касается spring-boot-devtool, так как Ankush92 правильно упомянул, что devtool отслеживает изменения пути к классам, и перезапуск происходит, только если есть какие-либо изменения в пути к классам.
Но, как я объяснил ранее, мы просто добавляем изменения нашего кода в файл, не относящийся к классу, и ожидаем, что devtool вызовет перезапуск, даже если это изменение не отражено в пути к классам.
Позвольте мне еще раз упомянуть, что в eclipse событие, которое делает то же самое, это Сохранение файла (Ctrl + S), когда включена автоматическая сборка.
Итак, теперь вопрос в том, как обойти и подражать тому, что Ctrl + S делает в Eclipse в Intellij Idea. Это довольно просто, давайте создадим приложение, и ярлык для этого будет Ctrl + F9. Это вызовет тот же эффект в intellij, что и Ctrl + S (в этом сценарии) в eclipse, и поможет devtool найти изменение в пути к классам, что побудит его перезапустить сервер. Поэтому каждый раз, когда вы вносите какие-либо изменения в файл и хотите перезагрузить сервер, просто нажмите Ctr + F9.
Я надеюсь, что это объяснение и обходной путь помогают.
Ответ 8
Edit - Macros - Start Macro Recording
File - Save All
Build - Build Project
Edit - Macros - Stop Macro Recording - You can save the macro name as "Save & Make Project"
Preferences - Keymap - Macros
Спуститесь, чтобы развернуть каталог макросов, чтобы найти новый макрос (т.е. "Сохранить и сделать проект" ).
Дважды щелкните значок "Добавить ярлык клавиатуры" и нажмите Cmd + S, если вы используете Mac и Ctrl + S, если используете Windows.
Intellij подскажет, что Ctrl + S уже существует, просто нажмите "Заменить".
Теперь все настройки и Ctrl + S должны запускать Spring -Boot Devtools
Ссылка: https://tomyjaya.github.io/2016/10/08/spring-boot-dev-tools-in-intellij/
Ответ 9
Я сталкивался с этой проблемой много в последние месяцы на моем MAC. Даже если вы выполните следующие действия, перечисленные здесь, например, отметьте "Автоматически создавать проект" и "Автоматическое создание компилятора".
Однако на моей работе, где мы используем Windows, она прекрасно работает, когда я выполняю следующие действия.
Решение для этой проблемы на MAC, которое я нашел, состоит в том, чтобы добавить новую конфигурацию запуска (нажмите ⌃⌥R, затем нажмите 0), а затем добавьте новую конфигурацию Maven. На вкладке "Командная строка" установите "spring-boot: run". Нажмите "Применить" и "ОК" и запустите проект, выбрав новую созданную конфигурацию.
Конечно, вы можете просто открыть новый терминал и просто набрать "mvn spring-boot: run", он тоже будет работать.
Ответ 10
Это сработало для меня. Добавьте следующую строку в файл application.properties,
spring.devtools.restart.enabled=true
Ответ 11
Я обнаружил, что IntelliJ даже не использовал мою конфигурацию Gradle.
Посетив Build, Execution, Deployment > Build Tools > Gradle
, затем под Delegate Settings
я выбрал Build and Run Using
и сделал его Gradle
.
Работать как шарм
![enter image description here]()
Для справки, вот моя конфигурация сборки:
plugins {
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'java'
id 'idea'
}
apply plugin: 'io.spring.dependency-management'
group = 'test'
version = '0.0.1'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
}
Это хорошо работает вместо из:
bootRun {
addResources = true // Did not work for me
}
Ответ 12
Если LiveReload работал для вас в прошлом, а затем вдруг перестает работать, и если другие предлагаемые решения не работают, попробуйте удалить и переустановить плагин LiveReload Browser. Вот что наконец-то исправило для меня.