1. ホーム
  2. maven

[解決済み] JavascriptのWebアプリとJavaサーバー、すべてをMavenでビルドするか、WebアプリにはGruntを使うか?

2023-01-25 16:43:15

質問

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>