web-dev-qa-db-ja.com

IntelliJは、gradleでビルドされたSpring Bootアプリケーションを終了しません

LinuxでIntelliJ 13.1を使用していて、基本的なREST例に従ってアプリケーションを作成しようとします http://spring.io/guides/gs/spring-boot/

IntelliJ内からターゲットbootRunを実行すると、統合されたTomcatサーバーが起動し、すべてが正常に動作します。

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

ただし、実行を停止しても、gradleタスクには影響しません。

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

構成されたポートでTomcatインスタンスに引き続きアクセスできます。 IntelliJを閉じるだけでプロセスが破壊されます。

私はこのトピックを検索しましたが、合理的な答えは見つかりませんでした。なのかしら

  • gradleの問題(gradle wrapperバージョン1.11を使用)
  • Linuxの問題(Ubuntu 12.04)
  • IntelliJの問題(IDEA 13.1.2)
  • スプリングブートの問題(1.0.0.RELEASEから1.1.0.M2までの異なるバージョンを試しました)
42

IntelliJの問題であると確信しています。

IntelliJのGradleインテグレーションからbootRunを実行してから[停止]を押すと、アプリケーションは前述のとおり実行を続けます。

ただし、コマンドラインを使用してgradle bootRunそして次に Cntrl+C、アプリケーションは問題なく停止します。

私のセットアップはWindows 7、IntelliJ 13.1.3、Gradle 1.12、Spring Boot 1.1.0.M2であることに注意してください。

アプリケーションを簡単にデバッグできるようにする必要がある場合は、mainメソッドを持つJava(またはGroovy)クラスを実行するだけです。それはSpring Bootアプリケーションを実行する最も簡単な方法です!そのためのSpring Bootへの賞賛!!!

もちろん、すべてのテストの実行やパッケージ化されたアプリケーションの作成などのタスクに引き続きGradleを使用できます。

20
geoand

私はこの回答がすでに回答されていることを知っていますが、これはGoogleで検索するときの最初のトピックであるため、私が行った代替案を共有することを考えましたが、読んだ他のトピックでは見つかりませんでした。

このterminateの主な問題は、常にクラスで何かを変更し、サーバーを再起動する必要があり、失敗するため、サーバーを_stop/start_する必要があることでした。

これを回避するには、 spring-boot-devtools を使用します。基本的に:

Spring-boot-devtoolsを使用するアプリケーションは、クラスパス上のファイルが変更されるたびに自動的に再起動します。

唯一の問題は、Intellijでは_Build > Make Project_をクリックした場合にのみmakesプロジェクトになるため、自動的にビルドするように設定するか、makeをクリックすることを忘れないでください。

使用するには、依存関係を_build.gradle / pom.xml_に追加するだけです:compile('org.springframework.boot:spring-boot-devtools')

これは開発に非常に役立つことがわかりました。

0
Felipe S.

MacでIntelliJを使用していますが、Springブートアプリケーションを実行すると同じ問題が発生しました。ターミナルでアプリを実行し、CTRL + Zを使用すると、ターミナルでアプリの実行が実行されます。しかし、同じ端末で再度アプリを実行すると、ポート8080が使用中であるというエラーが表示されます。ターミナルセッションを閉じるオプションを試してみました(右クリック->選択->セッションを閉じる)。これでターミナルが閉じます。ターミナルオプションをもう一度クリックしてアプリを実行すると、スムーズに実行されました。

0
Vijayakumar S