web-dev-qa-db-ja.com

JavaScript WebアプリとJavaサーバー、Mavenですべてビルドするか、WebアプリにGruntを使用しますか?

AngularJSを使用してWebアプリケーションを作成しており、依存関係の管理にBowerを使用し、テストの構築、実行などにGruntを使用するというアイデアが気に入っています( Yeoman

サーバーはMavenを使用してJavaで完了しているため、もちろん単純なmvn installすべてをビルドする(Webアプリケーション+サーバー)

それでは、どのようなアプローチをとったのですか?

1)それらを実際には2つの異なるアプリケーションとして扱います。したがって、さまざまな構築方法/ツールを使用することは許容されます。

2)Grunt Bowerを忘れ、Mavenプラグインを使用して、Webアプリケーションのビルド、テストの実行、依存関係の管理を行います。その場合、どれですか?

3)Maven execプラグインを使用してGruntを呼び出し、フロントエンドwebappをビルドします。私はこれをソリューションというよりもハックと考えています。

4)その他。

Jenkinsとの統合が容易なアプローチはプラスです。

前もって感謝します!

97
void

Javaツールキットのすべてのアセットパイプラインツールについてしばらく作業した後、いくつかの結論に達しました。

Javaベースのツーリング

ツールはいくつかありますが、最も人気のあるものはJAWRとWro4Jです。これらの両方の最大の問題は、ほとんどが Rhino ベース(WRO4JにNodeサポートが追加された)であり、RhinoはNodeベースのツールに比べて遅いことです。また、JavaScriptツールが急速に成熟していることを考慮する必要があるため、すばやく移動できるツールを探す必要があります。

  • WRO4J -サポートは素晴らしく、MavenとEclipseの統合は素晴らしく、プラグインのリストは広範であり、フレームワークは十分な柔軟性があるため、必要なものに合わせてプラグインを書くことができます。 Javaベースのアセットパイプラインに限定されている場合は、これが確実な方法です。 Wro4jの問題は、Nodeベースのツールに比べて(Nodeプロセスを開始する場合でも)遅いことです。
    LESSを含む25のアセットバンドルをコンパイルおよび連結するために、CSS CoffeeScriptおよびJavaScriptは、Rhinoを使用すると約35秒、16GのRAMを搭載した2013 iMacでWro4jのNodeサポートを使用すると約15秒かかります。 Grunt + Nodeを使用すると、ちっぽけなMacBook Airで約2秒かかります。

  • [〜#〜] jawr [〜#〜] -統合と機能リストは非常に優れていますが、ドキュメントは素晴らしいものではなく、独自のプラグインを書くのは少し難しい場合があります。私がこの投稿を最初に書いたとき、JAWRは4年の休止期間の途中でしたが、2014年1月の時点で現在活発な開発中です。Javaツールを調査することを選択した場合、調査する価値があります。

ノードベースのツール(Ant/Mavenビルドと統合)

  • Grunt -簡単で、素晴らしいプラグインエコシステムがあり、コミュニティは大規模です。あなたがする必要がある何かがあるなら、あなたはそれのためのプラグインがあると賭けることができます-恐らく、うなり声の作成者によって書かれたものでさえ。 Gruntの主要な批判は、それが非常にセットアップを容易にする構成駆動であるということですが、「Node Way」ではありません。また、Gruntタスクは簡単に構成できないため、複雑なJavaScriptビルドパイプラインではGruntは理想的ではない可能性があることに注意してください。

  • Gulp -GulpはGruntに代わる急成長中の代替品です。デフォルトではコンカレントであり、ストリームを使用して、ビルドを大幅に高速化できるファイルシステムへの一時的な書き込みを回避します。 Gulpは非常に慣用的であり、コードの構成に重点を置いており、これにより多くのパワーが得られますが、JavaScriptの中核能力を持たないチームには理想的ではありません。

JavaScriptベースのツールがハングアップする可能性があるのは、 Nodenpm および grunt-cli / gulp コンパイルを実行する必要のあるマシンで。 CIマシンにアクセスできない場合、またはアーティファクトベースの展開を使用していない場合、これは売り込みになる可能性があります。

これをMavenプロジェクトに統合するのは非常に簡単で、かなりの数のオプションがあります。 Maven ant-run plugin を使用できます。 ant execタスク を実行し、Mavenから呼び出すか、何よりも maven exec task
以下は、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>
73
Baer

まだこのトピックに関する詳細情報を探している人のために、Yeomanのクリエイターの1人が元の回答をもう少し詳細に展開した良い記事(この質問が最初に尋ねられてから数か月後に書かれた)を持っています:

24
Jeff Smith

次に、frontend-maven-pluginもあります。 https://stackoverflow.com/a/19600777/320399 ダウンロードNodeとNPM(ローカルにプロジェクト)、NPMを介してGruntをダウンロードし(そのノードで実行)、Gruntを実行します(そのノードを介して)。それは自己ブートストラップであり、マシンにNodeプロジェクトをビルドします。1つのコマンド、mvn install。

13

http://jhipster.github.io/ をチェックアウトすることをお勧めします。これはYeomanジェネレーターであり、Maven、Grunt、およびBowerがすべて連携して動作するアプリケーションを生成します。

3番目のオプションに少し似ていますが、すべてが自動的に構成されているため、それほど簡単ではありません。また、基本的なAngularJSおよびJava RESTサービスも生成します。

13
Julien Dubois

この問題に数時間を費やした後、私はこれを言うことができます:

mavenとgruntはうまく機能しませんが、強制することはできます。

実行するためのプラグインの説明Maven経由のGrunt build

これが役立つことを願っています:)

4
Nadav Leshem