it-swarm.com.de

IntelliJ beendet Spring Boot-Anwendungen, die mit gradle erstellt wurden, nicht

Ich verwende IntelliJ 13.1 unter Linux und versuche, eine einfache REST -Anwendung zu erstellen, die dem Beispiel folgt http://spring.io/guides/gs/spring-boot/

Wenn ich das Ziel bootRun in IntelliJ ausführe, wird der integrierte Tomcat-Server gestartet und alles funktioniert einwandfrei.

10:09:35: Executing external task 'bootRun'...
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun

Das Anhalten der Ausführung hat jedoch keine Auswirkungen auf die Gradle-Aufgabe:

10:11:40: External task execution finished 'bootRun'.

Ich kann weiterhin über den konfigurierten Port auf die Tomcat-Instanz zugreifen. Nur das Schließen von IntelliJ zerstört den Prozess.

Ich habe zu diesem Thema gesucht, aber keine vernünftigen Antworten gefunden. Ich frage mich, ob es eine ist

  • gradle problem (mit gradle wrapper version 1.11)
  • Linux Problem (Ubuntu 12.04)
  • IntelliJ-Problem (IDEA 13.1.2)
  • Spring Boot Problem (habe verschiedene Versionen von 1.0.0.RELEASE bis 1.1.0.M2 ausprobiert)
41

Ich bin mir ziemlich sicher, dass es sich um ein IntelliJ-Problem handelt, weil:

Wenn Sie bootRun über die Gradle-Integration von IntelliJ ausführen und dann auf Stop klicken, wird die Anwendung wie erwähnt ausgeführt.

Wenn Sie jedoch die Befehlszeile verwenden und gradle bootRun ausführen und dann verwendenCntrl+Cstoppt die Anwendung ganz gut.

Beachten Sie, dass mein Setup Windows 7, IntelliJ 13.1.3, Gradle 1.12 und Spring Boot 1.1.0.M2 ist.

Wenn Sie in der Lage sind, müssen Sie nur die Java- (oder Groovy-) Klasse mit der Methode main ausführen, da der einfachste Weg ist, Spring Boot-Anwendungen auszuführen! Ein dickes Lob an Spring Boot dafür !!!

Natürlich können Sie Gradle auch weiterhin für Aufgaben wie das Ausführen aller Tests oder das Erstellen der gepackten Anwendung verwenden.

19
geoand

Ich weiß, dass diese Antwort bereits beantwortet wurde, aber da dies das erste Thema bei der Suche in Google ist, dachte ich beim Teilen einer Alternative, mit der ich gegangen bin, und habe sie nicht in anderen Themen gefunden, die ich gelesen habe.

Mein Hauptproblem bei dieser terminate war, dass ich immer etwas in meinen Klassen geändert habe, dass ich den Server neu starten musste, und es würde fehlschlagen, sodass ich manchmal den Server stop/start musste.

Um dies zu vermeiden, verwende ich spring-boot-devtools . Grundsätzlich gilt:

Anwendungen, die Spring-Boot-Devtools verwenden, werden automatisch neu gestartet, wenn sich Dateien im Klassenpfad ändern.

Der einzige Haken ist, dass es auf Intellij nur makes des Projekts ist, wenn Sie auf Build > Make Project klicken, also entweder automatisch erstellen oder auf make klicken.

Fügen Sie einfach die Abhängigkeit zu Ihrem build.gradle / pom.xml hinzu: compile('org.springframework.boot:spring-boot-devtools')

Ich fand das sehr nützlich in der Entwicklung.

0
Felipe S.

Ich verwende IntelliJ auf einem Mac. Das Ausführen der Spring-Boot-Anwendung verursachte dasselbe Problem. Immer wenn ich die App im Terminal starte und STRG + Z benutze, wird das Terminal die Ausführung der App beenden. Aber wenn ich die App im selben Terminal erneut starte, wird eine Fehlermeldung angezeigt, die besagt, dass der Port 8080 verwendet wurde. Ich habe gerade versucht, die Terminal-Sitzung zu schließen (Rechtsklick -> Auswählen -> Sitzung schließen). Dadurch wird das Terminal geschlossen. Wenn ich erneut auf die Terminaloption klickte und die App ausführte, lief sie reibungslos.

0
Vijayakumar S