IntelliJ 15, SpringBoot devtools livereload не работает

21

Проблемы с новой функцией 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";
    }
}
    
задан Timm-ah 23.11.2015 в 12:10
источник

7 ответов

25

Я предполагаю, что вы кодируете и ожидаете, что DevTools автоматически узнает, что вы что-то изменили в своем проекте? Devtools делает это, наблюдая за вашими папками пути. Когда файл .class (или ресурс) был изменен, devtools принимает действие appopriate.

Если вы ничего не видите, это, вероятно, потому, что вы просто кодируете и не обновляете путь к классам. Вы должны вызвать Make Project , чтобы обновить путь к классам. См. документацию

    
ответ дан Stephane Nicoll 23.11.2015 в 14:29
  • Пытаясь понять следующее, «пользователям Intellij необходимо удалить, чтобы использовать действие« Построение → Сделать проект »для достижения того же результата». Может быть, это значит сказать «помнить», а не «снимать»? Вы, ребята, установили макрос или что-то, чтобы сделать свой проект автоматически? IntelliJ поддерживает это только в том случае, если приложение не работает ... Я видел, как другие нуждались в создании макроса и привязывали его к действиям «CTRL + S». –  Timm-ah 23.11.2015 в 16:07
  • это была опечатка, которая уже исправлена ​​на хозяине. Сделать проект всего одним ярлыком. Если вы считаете, что «CTRL-S» лучше для вас, сделайте это. Но это практически то же самое. Я действительно не покупаю подход «автоматически», но это может быть только я. –  Stephane Nicoll 23.11.2015 в 18:08
  • Хорошо, но что относительно статических активов. Зачем мне нужно использовать Build для них? –  Kaspar 05.12.2015 в 20:15
  • @ Каспар - спасибо, что спросили об этом. Мне нужно вручную вызвать сборку, чтобы увидеть изменения в статическом html-файле. Для меня это не большой рабочий процесс. –  arcseldon 22.05.2016 в 06:07
  • Я согласен. В этом вопросе: stackoverflow.com/questions/34104664/... Я упоминал, что когда я переместил свои статические ресурсы из папки с ресурсами, проблема была фактически исправлена. Вы тоже можете попробовать. –  Kaspar 11.06.2016 в 16:47
8

Чтобы решить эту проблему, вы можете: 1- Добавьте расширение LiveReload в свой браузер. 2- Добавьте зависимости devtools к вашему pom.xml (если это maven (spring-boot-devtools)). 3- В вашем intellij IDEA перейдите в: file- & gt; settings- & gt; сборка, выполнение, развертывание. Перейдите в - & gt; compiler- & gt; build project автоматически. 4-В вашем intellij IDEA: SHIFT + Ctrl + A - & gt; registry- & gt; compiler.automake.allow.when.app.running     

ответ дан Eddy Bayonne 08.10.2017 в 13:20
7

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 для своих статических активов, добавьте следующее (иначе вы не увидите cahngs статического содержимого при выполнении цели bootRun):

bootRun {
    addResources = true
}
    
ответ дан Derp 12.06.2016 в 12:09
5

Из документации здесь

Так как DevTools контролирует ресурсы пути к классам, единственным способом запуска перезапуска является обновление пути к классам. Способ, которым вы вызываете обновление класса, зависит от используемой среды IDE. В Eclipse сохранение измененного файла приведет к обновлению пути к классам и вызову перезапуска. В IntelliJ IDEA создание проекта (Build → Make Project) будет иметь тот же эффект.

    
ответ дан Ankush92 05.09.2016 в 09:07
  • можно проследовать по этой ссылке: youtube.com/watch?v=VWF7vCJSqrA –  Salahin Rocky 21.01.2018 в 09:39
1

Следуйте ниже простым шагам, вы будете работать менее чем за 2 минуты.

  1. Нажмите Ctrl + Shift + A
  2. Поиск реестра ...
  3. прокрутите и найдите «compiler.automake.allow.when.app.running», затем установите флажок, чтобы сделать его активным.
  4. Нажмите закрыть
  5. Меню файла - & gt; настройки ...
  6. Развернуть сборку, выполнение, развертывание
  7. Выберите «Скомпилировать»
  8. Выбрать флажок Создать проект автоматически
  9. Применить
  10. Нажмите Ok

Теперь остановите свой сервер приложений, а затем запустите приложение, и вы обнаружите, что автоматический перезапуск / перезагрузка активируется при обнаружении изменений в проекте.

Счастливое кодирование / взлом.

    
ответ дан Santhosh_Reddy 20.04.2018 в 04:51
1

, если вы используете IntelliJ IDEA, добавление spring-boot-devtools недостаточно. Это связано с тем, что в отличие от Eclipse, вам нужно явно указать IntelliJ IDEA на «Make the Project», чтобы он мог создать целевой путь.

см. на youtube

Самое простое решение: запустить режим отладки приложения и нажать Ctrl + f9 (сокращение для сборки)

или

  1. Вам нужно включить параметр «Сделать проект автоматически». Ты можешь найти его в настройках - сборка, выполнение, развертывание - компилятор
  2. Чтобы открыть реестр, просто нажмите SHIFT + CTRL + A. В реестре window, включите "compiler.automake.allow.when.app.running" Флажок.

    

ответ дан j-owl 06.05.2018 в 11:34
0
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

Ссылка: Ссылка

    
ответ дан Jana 17.01.2018 в 15:00