web-dev-qa-db-ja.com

IntelliJ 15、SpringBoot devtools livereloadが機能しない

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";
    }
}
47
Timm-ah

私はあなたがコーディングしていると推測し、DevToolsはあなたのプロジェクトで何かを変更したことを自動的に理解することを期待していますか? Devtoolsは、クラスパスフォルダーを監視することでそれを行います。 .classファイル(またはリソース)が変更されると、devtoolsは適切なアクションを実行します。

何も表示されない場合は、おそらくコーディングしているだけで、クラスパスを更新していないためです。クラスパスを更新するには、Make Projectを呼び出す必要があります。参照してください ドキュメント

38
Stephane Nicoll

これを解決するには、次のようにします。

  1. ブラウザにLiveReload拡張機能を追加します。
  2. Devtoolsの依存関係をpom.xmlに追加します(maven(spring-boot-devtools)の場合)。
  3. Intellij IDEAで、file-> settings-> build、execution、deploymentに移動します。 -> compiler-> build projectに移動します。
  4. Intellij IDEAで:SHIFT + Ctrl + A-> registry-> compiler.automake.allow.when.app.running
29
Eddy Bayonne

intelliJ IDEAを使用する場合、spring-boot-devtoolsを追加するだけでは不十分です。これは、Eclipseとは異なり、IntelliJ IDEAに「Make The Project」を明示的に指定して、ターゲットクラスパスにビルドする必要があるためです。

youtubeを参照

最も簡単な解決策:アプリデバッグモードを実行し、Ctrl + f9(ビルドのショートカット)を押します

または

  1. 「プロジェクトを自動的に作成」オプションを有効にする必要があります。設定-ビルド、実行、展開-コンパイラで見つけることができます
  2. レジストリを開くには、Shift + Ctrl + Aキーを押します。レジストリウィンドウで、「compiler.automake.allow.when.app.running」チェックボックスを有効にします。

build-project-automatically

compiler-automake-allow-when-app-running

19
ikarayel

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
}
12
Derp

以下の簡単な手順に従ってください。2分以内に稼働します。

  1. 押す Ctrl+Shift+A
  2. レジストリを検索...
  3. スクロールして「compiler.automake.allow.when.app.running」を探し、チェックボックスを選択してアクティブにします。
  4. 閉じるをクリック
  5. ファイルメニュー->設定...
  6. ビルド、実行、展開を展開
  7. コンパイラを選択
  8. [プロジェクトを自動的にビルドする]チェックボックスを選択します
  9. 適用する
  10. OKをクリック

アプリケーションサーバーを停止してからアプリケーションを起動します。プロジェクトで変更が検出されると、自動再起動/リロードがアクティブになります。

ハッピーコーディング/ハッキング。

7
Santhosh_Reddy

ドキュメントから here

DevToolsはクラスパスリソースを監視するため、再起動をトリガーする唯一の方法はクラスパスを更新することです。クラスパスを更新する方法は、使用しているIDEによって異なります。 Eclipseでは、変更されたファイルを保存すると、クラスパスが更新され、再起動がトリガーされます。 IntelliJ IDEAでは、プロジェクトのビルド(ビルド→プロジェクトの作成)は同じ効果を持ちます。

6
Ankush92

上記の質問に答えるために、まず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キーを押すだけです。この説明と回避策が役立つことを願っています。

4
saket0207
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/

1
Jana

これは私のために働いた。 application.propertiesファイルに次の行を追加し、

    spring.devtools.restart.enabled=true
0
Ezhil vikraman

過去にLiveReloadが機能していて突然機能しなくなった場合、および他の提案されたソリューションが機能しない場合は、LiveReload Browser Pluginをアンインストールして再インストールしてみてください。それが最終的に私のためにそれを修正したものです。

0
Chris

IntelliJは私のGradle構成を使用していないことを発見しました。

Build, Execution, Deployment > Build Tools > GradleにアクセスしてからDelegate Settingsの下でBuild and Run Usingを選択し、Gradleにしました。

魅力のように働く

enter image description here

参考のために、ここに私のビルド構成があります:

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
}
0
Spider

私はこの数ヶ月、MACでこの問題に何度も直面しています。 「プロジェクトを自動的に作成する」や「コンパイラの自動作成」をチェックするなど、ここにリストされているこれらの手順に従う場合でも。

ただし、Windowsを使用している私の仕事では、これらの手順を実行すると完全に機能します。

MACでのこの問題の解決策新しい実行構成を追加して(toRを押してから0を押す)、新しいMaven構成を追加することです。 「コマンドライン」入力で「spring-boot:run」を設定します。 [適用]と[OK]を押し、作成された新しい構成を選択してプロジェクトを実行します。

もちろん、新しいターミナルを開いて「mvn spring-boot:run」と入力するだけでも機能します。