2016-09-20 9 views
2

私は現在、AngularJsを使って組み込みサーバー用のフロントエンド/ webapp(Tomcatとして動作する.jarファイルにパッケージ化されています)を開発中です。サーバーには、フロントエンドで使用できるいくつかのAPIエンドポイントがあります。Springブートとwro4jでIntelliJのホットスワップ

私の現在のアプローチは、webjarsを使用して私の選択のanglejsバージョンを読み込んでから、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 /メイン/ webappの/パブリックフォルダ内にあり、彼らはターゲット/クラス/パブリックフォルダに「コンパイル」なっています。 サーバが稼働している間にファイルをリロードしたい場合は、Run -> Reload Changed Classesを実行しなければなりません。

しかし私は最初、 "スタンドアロン"のAngularJs開発から、私は実際のライブロードと、最適化のためにjs/cssファイルを縮小し連結するビルドチェーンを持つことに慣れてきました。

私は既にwro4jを調べて、うまくセットアップできました。私のためにそこにまだ欠けている1つの事はホットリロードです。上記のアプローチでもwro4jでは動作しなくなりました。したがって、アプリケーション全体を再コンパイルしてcss/javascriptまたはHTML内の変更を確認することしかできませんでした。 簡単な方法がありますか?

私の好ましい方法は、

どのようなものです(デバッグでサーバーを実行している)、アプリケーションが展開(または単にファイル名を指定して実行)されている場合のみ、全体のビルド・チェーンを実行して開発しながらunminified/unconcatenatedバージョンで動作するようになります私のオプション?

+0

これは私のために働いた:http://stackoverflow.com/questions/21399586/hot-swapping-in-spring-boot/43114954#43114954 – shabby

答えて

0

私がやったことは多少の過度の攻撃でしたが、他の適切な解決策は見つかりませんでした。

私は、ライブリロードとビルドチェーンの機能(concat、minifyなど)を持つことができるGruntfile.js(angularjsのyeomanジェネレータをベースにしています)を構築しました。これで私はフロントエンドでサーバを起動する必要なく、作業することもできました。このファイルの唯一の "汚れたハック"は、grunt buildがdistフォルダを/src/main/resources/staticフォルダにコピーし、.warファイルに "コンパイル"されるということです。

私は(、NPMバウアーは、インストール、インストールイサキビルド、クリーンイサキ)いくつかのMavenプラグインは、ビルド時に必要なコマンドを実行することができるようにするために使用

<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で春ブーツデベロッパーツールのドキュメントをチェックしてください。

<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

Nope Spring DevTools livereloadは、IntelliJのwro4jで静的コンテンツを変更したことを検出しません。また、wro4j構成でキャッシュが有効になっている場合、生成されたバンドルjsまたはcssも更新されません。 –

関連する問題