Подтвердить что ты не робот

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)?

4b9b3361

Ответ 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 (который вы можете скачать здесь)

  1. Отладка с помощью правой кнопки мыши → Отладка, как показано на следующем снимке экрана:

enter image description here

  1. Каждый раз, когда вы делаете изменения и хотите перезагрузить его, просто скомпилируйте проект. Ярлык по умолчанию - Cntrl + F9, но вы также можете получить к нему доступ из меню BuildMake 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).

кредиты/ссылка