[解決済み] JavascriptのWebアプリとJavaサーバー、すべてをMavenでビルドするか、WebアプリにはGruntを使うか?
質問
AngularJSでWebアプリケーションを作っているのですが、依存関係管理にBower、ビルドやテストの実行などにGruntを使うというアイデアが気に入っています( ヨーマン )
サーバーはMavenを使ってJavaで行いますので、当然ながら単純な
mvn install
ですべてを構築したいところです(Webアプリケーション+サーバ)
では、どのようなアプローチで、なぜそうしたのでしょうか?
1) 2つの異なるアプリケーションとして扱い、実際そうである。だから、異なる構築方法/ツールを使っても構わない。
2) Grunt Bowerのことは忘れて、Webアプリケーションのビルド、テストの実行、依存関係の管理にMavenプラグインを使用します。もしそうであれば、どれがそうなのでしょうか?
3) フロントエンドのウェブアプリケーションを構築するためにGruntを呼び出すためにMaven execプラグインを使用します。私は、これを解決策というよりハックとして見ています。
4) その他。
Jenkinsとの連携が容易なアプローチはプラスです。
よろしくお願いします。
どのように解決するのですか?
しばらくの間、Java ツールキットのほぼすべてのアセット パイプライン ツールで作業した後、私はいくつかの結論に達しました。
Java ベースのツール
世の中にはたくさんのツールがありますが、最も人気があるのはJAWRとWro4Jです。この 2 つのツールの最大の問題点は、ほとんどが Rhino ベースであり(WRO4Jは現在Nodeを一部サポートしています)、RhinoはNodeベースのツールに比べると遅いということです。また、JavaScript のツールは急速に成熟しているので、素早く動くことができるツールを探すべきであることも考慮しなければなりません。
-
WRO4J - サポートは素晴らしく、MavenとEclipseの統合は素晴らしく、プラグインのリストは広範囲で、フレームワークは十分に柔軟で、必要なもののためにプラグインを書くことができます。もし、あなたがJavaベースのアセット・パイプラインに制限されているなら、これは間違いなく行くべき道です。Wro4jの問題は、Nodeベースのツールに比べて遅いことです(Nodeプロセスを起動するときでさえ)。
実際の数字を挙げると、LESS、CSS CoffeeScript、JavaScriptを含む25のアセットバンドルのコンパイルと連結に、Rhinoを使用した場合は約35秒、Wro4jのNodeサポートを使用した場合は約15秒かかります(2013 iMac, 16G of RAM使用時)。使用方法 Grunt +Node を使用すると、私の貧弱な MacBook Air で約 2 秒かかります。 -
JAWR - 統合と機能リストはかなり良いですが、ドキュメントはあまり良くなく、独自のプラグインを書くのは少し難しいかもしれません。私が最初にこの記事を書いたとき、JAWR は 4 年間の休止期間中でしたが、2014 年 1 月現在、再び活発な開発が行われています。もしあなたがJava Toolsを調査することを選択した場合、これは調査する価値があります。
ノードベースツール(Ant/Mavenビルドとの統合)
-
Grunt - Gruntは簡単で、素晴らしいプラグインエコシステムがあり、コミュニティは巨大です。もしあなたが何かをする必要があるなら、そのためのプラグインがあることに賭けることができます - おそらくgruntのクリエイターによって書かれたものでさえ。Gruntの主な批判は、それが非常に簡単にセットアップするための設定駆動であることですが、"Node Way.ではありません" Gruntタスクが簡単に構成可能ではないことも言及する価値があります。
-
ガルプ - GulpはGruntに代わるものとして急成長しています。デフォルトでは並列処理で、ファイルシステムへの一時的な書き込みを避けるためにストリームを使用し、ビルドをかなり高速化することができます。Gulpは非常にイディオム的で、コードと設定に重点を置いており、これは多くのパワーを与えてくれますが、JavaScriptのコアコンピテンシーを持っていないチームには理想的ではありません。
JavaScript ベースのツールの唯一の潜在的な問題点は、以下のものが必要であるということです。
ノード
,
npm
と
グランツクライ
/
gulp
をコンパイルが必要なマシンで実行します。CIマシンにアクセスできない場合や、アーティファクトベースのデプロイメントを使用していない場合、これはハードルが高いかもしれません。
これを Maven プロジェクトに統合するのは非常に簡単で、いくつかのオプションがあります。Maven の
ant-run プラグイン
を実行することができます。
ant 実行タスク
を実行し、Mavenから呼び出すこともできますし、最も良い方法は
maven exec タスク
.
以下はexecプラグインを使ってこれをMavenのライフサイクルに統合するためのコードですが、もしこれが誰かの参考になるなら。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>grunt</executable>
</configuration>
</plugin>
関連
-
[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
-
[解決済み] 認証とセッション管理に関するSPAのベストプラクティス
-
[解決済み] intellijでmavenの依存関係階層を表示する方法
-
[解決済み] Maven : "runtime "スコープは何のためにあるのですか?重複
-
[解決済み] Nexusでアーティファクトをデプロイするときのエラー
-
[解決済み] Mavenからのコマンドライン引数をpom.xmlのプロパティとして渡す
-
[解決済み] repository tag under distributionManagement vs repositories?
-
[解決済み] GradleプロジェクトのmavenアーティファクトIDはどのように設定しますか?
-
[解決済み] なぜpom.xmlのmodelVersionは必要で、常に4.0.0に設定されるのですか?
-
[解決済み] Intellij 14でMavenプロジェクトのウィンドウを表示する方法|アップデート:Mavenプロジェクトで右側の「タブバー」が表示されない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] install:install-fileで追加したjarファイルをローカルのmavenリポジトリから削除する方法は?
-
[解決済み] プラグインの実行がライフサイクル設定に含まれない(JBossas 7 EAR archetype)
-
[解決済み] Nexusでアーティファクトをデプロイするときのエラー
-
[解決済み] Mavenからのコマンドライン引数をpom.xmlのプロパティとして渡す
-
[解決済み] リソースのフィルタリングのためにmaven.build.timestampにアクセスする方法
-
[解決済み] Maven スナップショットリポジトリとリリースリポジトリの比較
-
[解決済み] mavenのsurefireでスタックトレースをコンソールに表示させる
-
[解決済み] Mavenの依存関係をグローバルに除外する方法はありますか?
-
[解決済み] ラインカバレッジとブランチカバレッジの違い
-
[解決済み] Intellij 14でMavenプロジェクトのウィンドウを表示する方法|アップデート:Mavenプロジェクトで右側の「タブバー」が表示されない