Spring Boot devtools 1.3の新しいLiveReload機能に問題があります。クラスが変更されても再ロードされません。 IntelliJ @ Devoxx 2015でデモ版を見たことがあります。有効にする必要があるIDE設定はありますか? Gradle経由ではなく、IDE経由で実行しています。 「プロジェクトを自動的に作成する」を有効にしてみましたが、これは役に立たないようです。
正しくロードされているようで、正しいパスを探しています
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";
}
}
私はあなたがコーディングしていると推測し、DevToolsはあなたのプロジェクトで何かを変更したことを自動的に理解することを期待していますか? Devtoolsは、クラスパスフォルダーを監視することでそれを行います。 .class
ファイル(またはリソース)が変更されると、devtoolsは適切なアクションを実行します。
何も表示されない場合は、おそらくコーディングしているだけで、クラスパスを更新していないためです。クラスパスを更新するには、Make Projectを呼び出す必要があります。参照してください ドキュメント
これを解決するには、次のようにします。
intelliJ IDEAを使用する場合、spring-boot-devtools
を追加するだけでは不十分です。これは、Eclipseとは異なり、IntelliJ IDEAに「Make The Project」を明示的に指定して、ターゲットクラスパスにビルドする必要があるためです。
最も簡単な解決策:アプリデバッグモードを実行し、Ctrl + f9
(ビルドのショートカット)を押します
または
LiveReloadと再起動は異なる機能です。 Livereloadを使用すると、resources/static
フォルダーの変更を検出し、ファイルが変更され、ページをリロードする必要があることをブラウザーに通知できます。
質問は、再起動のシナリオについて説明しています。 * .class-filesの変更時にアプリケーションを自動的にリロードする場合は、IDEがコンパイルされたクラスを次のように出力していることを確認してください。
build\classes\main
IntellijでProject Structure(Ctrl + Alt + Shift + S)に移動し、プロジェクトコンパイラの出力ディレクトリをセットアップします。この後、クラスを変更し、Ctrl + Shift + F9を押して現在のクラスを再コンパイルするか、Ctrl + F9を押してプロジェクト全体を再コンパイルします。 Spring Boot Devtoolsはbuild\classes\main
の変更を検出し、アプリケーションの再起動を自動的に実行します。
静的アセットのLiveReloadを有効にしたい場合は、次を追加します(そうしないと、bootRunゴールの実行中に静的コンテンツの問題は表示されません)。
bootRun {
addResources = true
}
以下の簡単な手順に従ってください。2分以内に稼働します。
アプリケーションサーバーを停止してからアプリケーションを起動します。プロジェクトで変更が検出されると、自動再起動/リロードがアクティブになります。
ハッピーコーディング/ハッキング。
ドキュメントから here
DevToolsはクラスパスリソースを監視するため、再起動をトリガーする唯一の方法はクラスパスを更新することです。クラスパスを更新する方法は、使用しているIDEによって異なります。 Eclipseでは、変更されたファイルを保存すると、クラスパスが更新され、再起動がトリガーされます。 IntelliJ IDEAでは、プロジェクトのビルド(ビルド→プロジェクトの作成)は同じ効果を持ちます。
上記の質問に答えるために、まずIntellij Ideaの機能を理解しましょう。変更するファイルを保存する必要がないことを確認しておく必要があります。また、.classファイル以外で行った変更は保存されたままです。クロス検証を行うには、.Javaファイルに何らかの変更を加えて(他のファイルも選択できます)、ファイルを閉じます。保存を求めるメッセージは表示されず、ファイルを再度開いても変更は残っています。ただし、.classファイルをチェックすると、変更は反映されません。これは、ビルドが行われていないため明らかです。それどころか、Eclipseで自動ビルドを有効にすると、イベントで実行され、イベントは[ファイルの保存]-> [Ctrl] + [S](Windows)になります。しかし、intellijの考えでは、イベントは発生していないか、そのイベントを実行していません。そのため、spring-boot-devtoolがない場合のシナリオを考えてください。その場合、サーバーを再構築または再起動して変更を取得し、イベントを発生させる必要がありました。現在、Spring-boot-devtoolに関して、Ankush92はdevtoolがクラスパスの変更を監視し、クラスパスに変更があった場合にのみ再起動することを正しく述べています。しかし、前に説明したように、非.classファイルにコードの変更を追加し、その変更がクラスパスに反映されていない場合でもdevtoolが再起動をトリガーすることを期待しています。 Eclipseで同じことを行うイベントは、自動ビルドが有効になっているときにファイルを保存する(Ctrl + S)ということです。だから、今の問題は回避策を持ち、EclipseでCtrl + SがIntellij Ideaに行うことを模倣する方法です。アプリケーションをビルドするのは非常に簡単で、そのショートカットはCtrl + F9です。これにより、EclipseのCtrl + S(このシナリオでは)と同じintellijの効果がトリガーされ、devtoolがクラスパスの変更を見つけやすくなり、サーバーの再起動が促進されます。そのため、ファイルに変更を加えてサーバーを再起動するには、Ctr + F9キーを押すだけです。この説明と回避策が役立つことを願っています。
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
下に移動してマクロディレクトリを展開し、新しいマクロを見つけます(「プロジェクトの保存と作成」)。 [キーボードショートカットの追加]をダブルクリックし、Macを使用している場合はCmd + Sを、Windowsを使用している場合はCtrl + Sを押します。
Intellijは、[置換]をクリックするだけでCtrl + Sが既に存在することを示すプロンプトを表示します。
これで、すべてのセットとCtrl + SがSpring-Boot Devtoolsをトリガーするはずです
参照: https://tomyjaya.github.io/2016/10/08/spring-boot-dev-tools-in-intellij/
これは私のために働いた。 application.propertiesファイルに次の行を追加し、
spring.devtools.restart.enabled=true
過去にLiveReloadが機能していて突然機能しなくなった場合、および他の提案されたソリューションが機能しない場合は、LiveReload Browser Pluginをアンインストールして再インストールしてみてください。それが最終的に私のためにそれを修正したものです。
IntelliJは私のGradle構成を使用していないことを発見しました。
Build, Execution, Deployment > Build Tools > Gradle
にアクセスしてからDelegate Settings
の下でBuild and Run Using
を選択し、Gradle
にしました。
魅力のように働く
参考のために、ここに私のビルド構成があります:
plugins {
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'Java'
id 'idea'
}
apply plugin: 'io.spring.dependency-management'
group = 'test'
version = '0.0.1'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
}
これはうまく機能します代わりに:
bootRun {
addResources = true // Did not work for me
}
私はこの数ヶ月、MACでこの問題に何度も直面しています。 「プロジェクトを自動的に作成する」や「コンパイラの自動作成」をチェックするなど、ここにリストされているこれらの手順に従う場合でも。
ただし、Windowsを使用している私の仕事では、これらの手順を実行すると完全に機能します。
MACでのこの問題の解決策新しい実行構成を追加して(toRを押してから0を押す)、新しいMaven構成を追加することです。 「コマンドライン」入力で「spring-boot:run」を設定します。 [適用]と[OK]を押し、作成された新しい構成を選択してプロジェクトを実行します。
もちろん、新しいターミナルを開いて「mvn spring-boot:run」と入力するだけでも機能します。