2016-09-20 59 views
2

我目前正在開發一個嵌入式服務器的前端/ web應用(打包在一個.jar文件,運行如Tomcat)的與AngularJs。服務器有一些我希望能夠在前端使用的API端點。熱插拔的IntelliJ中使用Spring引導和wro4j

我目前的做法是使用webjars加載我選擇的angularjs版本,然後只是生成WebApp文件夾中的應用程序。該結構是這樣的:

├───src 
│ ├───main 
│ │ ├───docker 
│ │ ├───java 
│ │ │ └───com 
│ │ │  └───...  
│ │ ├───resources 
│ │ └───webapp 
│ │  └───public 
│ │   ├───css 
│ │   └───js 
│ │    └───controllers 
└───target 
    ├───classes 
    │ ├───com 
    │ │ └───... 
    │ └───public 
    │  ├───css 
    │  └───js 
    │   └───controllers 
    ├───generated-sources 
    │ └───annotations 
    ├───generated-test-sources 
    │ └───test-annotations 
    └───test-classes 
     └───com 
      └───... 

我正在編輯的文件是在src /主/ web應用/公共文件夾內,之後就被「編譯」成目標/班/公用文件夾。 如果我想在服務器運行時重新加載一個文件,我必須執行Run -> Reload Changed Classes,這在開發過程中工作得很好。但由於我最初來自「獨立」AngularJs開發,我開始習慣於擁有真正的livereload和構建鏈,它可以縮小和連接js/css文件進行優化(grunt,bower)。

現在我已經看着wro4j,並能設置它就好了。那裏仍然缺少的一件事是熱重裝。即使上述方法不再適用於wro4j,因此唯一的選擇是重新編譯整個應用程序以查看css/javascript或HTML中的更改。 有沒有簡單的方法呢?

我首選的方法是在unminified/unconcatenated版工作,同時開發(運行在調試服務器),只有當應用程序部署(或只是運行)執行整個構建鏈

是什麼我的選擇?

+0

這工作對我來說:http://stackoverflow.com/questions/21399586/hot-swapping-in-spring-boot/43114954#43114954 – shabby

回答

0

我最終什麼事做了也許有點矯枉過正,但我​​沒有發現任何其他合適的解決方案。

我建了一個Gruntfile.js(基於對angularjs自耕農發生器),以便能夠有livereload和構建鏈功能(CONCAT,縮小等)。有了這個,我也能夠在前端工作,而不必啓動服務器。這個文件中唯一的「骯髒的黑客」是grunt build將它的dist文件夾複製到/src/main/resources/static文件夾,以便它被「編譯」到.war文件中。

我使用了一些Maven插件,以便能夠執行在構建時需要的命令(NPM安裝,涼亭安裝,咕嚕打造,咕嚕乾淨)

<plugin> 
<groupId>com.github.eirslett</groupId> 
<artifactId>frontend-maven-plugin</artifactId> 
<version>0.0.22</version> <!-- last version supported by maven 2 --> 
<dependencies> 
    <dependency> 
     <groupId>org.codehaus.plexus</groupId> 
     <artifactId>plexus-utils</artifactId> 
     <version>2.1</version> 
    </dependency> 
</dependencies> 
<configuration> 
    <nodeVersion>v0.10.18</nodeVersion> 
    <npmVersion>1.3.8</npmVersion> 
    <workingDirectory>src/main/frontend</workingDirectory> 
</configuration> 
<executions> 
    <execution> 
     <id>install node and npm</id> 
     <goals> 
      <goal>install-node-and-npm</goal> 
     </goals> 
     <phase>generate-resources</phase> 
    </execution> 
    <execution> 
     <id>npm install</id> 
     <goals> 
      <goal>npm</goal> 
     </goals> 

     <configuration> 
      <arguments>install</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>bower install</id> 
     <goals> 
      <goal>bower</goal> 
     </goals> 

     <configuration> 
      <arguments>install</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>npm rebuild</id> 
     <goals> 
      <goal>npm</goal> 
     </goals> 

     <configuration> 
      <arguments>rebuild node-sass</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>grunt build</id> 
     <goals> 
      <goal>grunt</goal> 
     </goals> 

     <configuration> 
      <arguments>build</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>npm install before clean</id> 
     <goals> 
      <goal>npm</goal> 
     </goals> 

     <phase>clean</phase> 

     <configuration> 
      <arguments>install</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>grunt clean</id> 
     <goals> 
      <goal>grunt</goal> 
     </goals> 

     <phase>clean</phase> 

     <configuration> 
      <arguments>clean</arguments> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 

我希望這給了我的做法了廣闊的思路。這當然不是完美的,特別是因爲它增加了整個項目的構建時間。

1

http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html

Maven的退房春季啓動DevTools文檔。

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-devtools</artifactId> 
     <optional>true</optional> 
    </dependency> 
</dependencies> 

Gradle。

dependencies { 
    compile("org.springframework.boot:spring-boot-devtools") 
} 

它包括一個內置的LiveReload服務器。你應該能夠通過運行「Make Project」來從IntelliJ更新你的應用程序。

+0

不工作Spring DevTools livereload不檢測變化使IntelliJ中的wro4j靜態內容。另外,當在wro4j配置中啓用緩存時,它甚至不會更新生成的捆綁包js或css。 –