2015-11-23 88 views
18

在Spring Boot devtools 1.3中遇到新的LiveReload功能問題。它不會重新加載類更改。我已經看到它與IntelliJ @ Devoxx 2015 demo'd。有一些IDE設置我需要啓用?我通過IDE運行,而不是通過Gradle。我嘗試啓用「自動生成項目」,這似乎沒有幫助。IntelliJ 15,SpringBoot devtools livereload不起作用

它似乎正確加載,並期待在正確的路徑

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"; 
    } 
} 

回答

22

我一個m猜你在編碼,並期望DevTools自動地發現你已經改變了項目中的某些東西? Devtools通過觀看你的類路徑文件夾來實現這一點。當.class文件(或資源)發生更改時,devtools會採取適當的操作。

如果你沒有看到任何東西,那可能是因爲你只是編碼而沒有更新類路徑。您必須調用使項目更新類路徑。請參閱the documentation

+0

試圖瞭解以下「的IntelliJ用戶需要卸妝使用生成→使項目採取行動,以實現同樣的結果。「也許這是爲了說「記住」而不是「卸妝」?你們是否設置了一個宏或什麼東西來自動完成你的項目?只有當應用程序沒有運行時,IntelliJ才支持這個功能......我見過其他人需要創建一個宏並將其與「CTRL + S」操作綁定。 –

+0

這是一個錯誤,[已經固定在master上](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-devtools-restart)。使項目只是一個捷徑。如果你覺得「CTRL-S」對你更好,那麼做。但它基本上是完全一樣的東西。我真的不買「自動製造」的方法,但那可能就是我。 –

+6

好吧,但靜態資產呢。爲什麼我需要爲他們調用Build? – Kaspar

7

LiveReload和重新啓動是不同的功能。 Livereload允許您檢測resources/static文件夾中的更改,並通知瀏覽器文件已更改,並且頁面應該重新加載。

您的問題描述重新啓動方案。如果你希望你的應用程序自動重新加載上的* .class-文件的更改,請確保您的IDE outoputs編譯類:

build\classes\main 

在的IntelliJ去項目結構(按Ctrl + Alt + Shift + S)和安裝項目編譯器輸出目錄。之後,您可以對類進行更改,然後按Ctrl + Shift + F9重新編譯當前課程或按Ctrl + F9重新編譯整個項目。 Spring Boot Devtools將檢測build\classes\main中的更改並自動執行應用程序的重新啓動。

如果要啓用LiveReload爲您的靜態資產添加以下(否則你不會看到的靜態內容cahnges在執行bootRun目標):

bootRun { 
    addResources = true 
} 
5

從文檔here

DevTools監視類路徑資源時,觸發重啓的唯一方法是更新類路徑。導致類路徑更新的方式取決於您使用的IDE。在Eclipse中,保存修改後的文件將導致更新類路徑並觸發重新啓動。在IntelliJ IDEA中,構建項目(Build→Make Project)將具有相同的效果。

+0

可以點擊此鏈接: https://www.youtube.com/watch?v=VWF7vCJSqrA –

4

解決此問題您可以像這樣: 1-在您的瀏覽器中添加LiveReload擴展。 2-向您的pom.xml添加devtools依賴項(如果它是maven(spring-boot-devtools))。在您的智能IDEA中,轉至:文件 - >設置 - >構建,執行,部署。轉到 - >編譯器 - >自動生成項目。 4在你的IntelliJ IDEA:SHIFT + CTRL + A - >登記處送交> compiler.automake.allow.when.app.running

0
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應該觸發彈簧引導Devtools

參考:https://tomyjaya.github.io/2016/10/08/spring-boot-dev-tools-in-intellij/