plugin - Spring Boot+Spring-Loaded(IntelliJ, Gradle)
install spring boot intellij (5)
Me gustaría utilizar intercambio en caliente con mi proyecto Spring Boot. De alguna manera, no puedo hacerlo funcionar ejecutándolo en mi IDE (IntelliJ), a pesar de tener este tema cubierto por la documentation . Simplemente ejecuto la clase con mi método principal con atributos de VM:
-javaagent:/path/to/jar/springloaded.jar -noverify
Mi pregunta es, ¿cómo hago que funcione? :-)
La siguiente pregunta es cómo usar el resorte cargado con Gradle e IntelliJ. Encuentro bastante inconveniente forzar al desarrollador a descargar el JAR manualmente, colocarlo en algún lugar y señalarlo con un parámetro JVM. ¿Hay alguna manera mejor (debo configurar mi propia tarea que hace el trabajo y ejecutarlo desde mi IDE como una tarea de Gradle)?
En versiones posteriores de gradle puede iniciar una ventana de comandos y ejecutar
gradle -t classes
Esto iniciará un proceso que buscará cambios en el código fuente y los recompilará.
En otra corrida.
gradle bootRun
Cualquier cambio a java o groovy src se volverá a aplicar automáticamente. Si bien no es específico para ti, te conviene ir con intellij. Incluso podrías arreglártelas con tu editor de texto favorito (por ejemplo, submlime, atom).
Estoy ejecutando SpringBoot y Gradle en IntelliJ Idea. La recarga automática funciona al 100%
- El contenido estático se carga automáticamente (instantáneamente)
- Thymeleaf se está cargando automáticamente (instantáneamente)
- Controladores / Archivos Java requieren que presione el botón "compilar" (toma unos segundos), pero no requiere un reinicio, solo es para compilar los archivos, por lo que Spring Loaded puede recogerlos.
Paso 1: ejecuta 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''
}
Paso 2: crea una Application.properties
Y agrega lo siguiente:
spring.thymeleaf.cache=false
Paso 3: ejecuta la tarea bootRun
(No solo la tarea de ejecución estándar: esto agrega funcionalidad SpringLoaded)
Paso 4: compila tu Java
Haga sus archivos Java presionando "Make Project" o presionando "Ctrl / Command + F9"
Logré hacer esto con IDEA en un proyecto de Maven, debería funcionar también con la versión de Gradle, supongo, mi procedimiento fue el siguiente.
- Configuración -> Compilador -> Hacer proyecto automáticamente (solo funciona mientras no se está ejecutando / depurando!)
- Comience el proyecto con el sprint-boot-plugin fuera del IDE (un truco debido a la oración anterior).
La configuración de los complementos Maven tiene el siguiente aspecto:
<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>
Ahora cambie un código y vuelva a cargar la página.
Necesita configurar el proyecto como se indica en la documentación:
Después de eso, debe configurar su IDE para generar las clases compiladas en build / classes / main (con el complemento Idea, puede configurar el dirProducto como se especifica en el enlace anterior, y luego invocar la gradle idea
para que lo haga).
Luego, si inicia la tarea (ejecutar / bootRun) o ejecuta la clase principal desde el IDE usando el modo de depuración, la recarga de código caliente debería funcionar cuando se compila una clase.
El problema aquí es que IntelliJ, a diferencia de Eclipse, no compila automáticamente una clase cuando se guarda (incluso si configura el compilador como "Build on save", no lo hará cuando se está ejecutando / depurando). Esto es aparentemente una decisión de diseño hecha por IntelliJ, como se indica aquí. Las clases de Intellia IDEA Java no se compilan automáticamente al guardar (respuesta de CrazyCoder).
Sería ideal si el arranque de primavera proporcionara una opción de configuración para monitorear sus archivos de código fuente y recompilarlos cuando cambien, eso es lo que hace Grails. Pero creo que tal idea aún no existe, y tal vez ni siquiera sea posible combinar eso con Gradle, que es el responsable de administrar el classpath y ese tipo de cosas.
Entonces, hay dos opciones por lo que puedo decir:
- Recuerda recopilar todo lo que edita (agregar un acceso directo de compilación más fácil, como se sugirió en el enlace anterior de podría ayudar).
- Pones algún monitor del sistema de archivos (inotify-tools para Linux, launchd para Mac OS X son ejemplos) que invoca gradle compileJava / compileGroovy cuando se detecta un cambio en cualquier archivo de código fuente.
Primero es tedioso, segundo es lento :). En realidad, hay otra opción: cambia tu IDE :-D (o instala el complemento EclipseMode IntelliJ).
Si uno quiere poder ejecutar la aplicación únicamente desde IntelliJ (usando el botón derecho del ratón -> Depurar en el método principal) y no involucrar las tareas de Gradle de Spring Boot, simplemente necesita hacer lo siguiente:
- Configure la configuración de ejecución en IntelliJ para usar el agente SpringLoaded. Esto es fácil de hacer y se muestra un ejemplo en la siguiente captura de pantalla:
Observe cómo agregué una VM Option
: -javaagent:/path/to/springloaded-${version}.jar -noverify
(que puede descargar here )
- Depurar usando el botón derecho del ratón -> Depurar como la siguiente captura de pantalla:
- Cada vez que realiza un cambio y desea volver a cargarlo, simplemente compile el proyecto. El acceso directo predeterminado es Cntrl + F9 , pero también puede acceder desde el menú
Build
->Make Project