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


97

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

サーバーはMavenを使用してJavaで行われるため、もちろんmvn installすべてをシンプルに構築したいと思います(Webアプリケーション+サーバー)

では、どのようなアプローチを採用しましたか、またその理由は何ですか。

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

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

3)Maven execプラグインを使用してGruntを呼び出し、フロントエンドWebアプリケーションをビルドします。私はこれを解決策というよりはハックとして捉えています。

4)その他。

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

前もって感謝します!


2
3年後、ツールの統合は明らかに改善されました。このMavenプラグインはほとんどのことをカバーしているようです: github.com/eirslett/frontend-maven-plugin
earcam

回答:


73

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

Javaベースのツール

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

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

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

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

  • Grunt-簡単です。素晴らしいプラグインエコシステムがあり、コミュニティは大規模です。あなたがやらなければならないことがあるなら、あなたはそれにプラグインがあるに違いない-おそらく、うなり声の作成者によって書かれたものでさえも。Gruntの主な批判は、非常に設定しやすい構成主導型ですが、「ノードウェイ」ではないということです。また、Gruntタスクは簡単に構成できないため、複雑なJavaScriptビルドパイプラインではGruntが理想的ではない可能性があることにも言及する価値があります。

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

JavaScriptベースのツールの唯一の潜在的なハングアップは、コンパイルを実行する必要があるすべてのマシンでNodenpm、およびgrunt-cli / gulpが必要になることです。CIマシンにアクセスできない場合、またはアーティファクトベースのデプロイを使用していない場合、これは困難な場合があります。

これをMavenプロジェクトに統合するのは非常に簡単で、かなりの数のオプションがあります。Maven ant-runプラグインを使用できます。antexecタスクを実行して、それを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>

1
詳細な回答ありがとうございます。私はノードベースのツールオプションに行くと思います。Gruntを初めて使用するときは、これまでに見たものを気に入っています。2つの世界のベストを手に入れることができればすばらしいと思います。WRO4JとJAWRの存在については知りませんでした。再度、感謝します。
無効

wro4jは、less.jsのJavaベースの実装であるless4jプロセッサを統合しています。less.jsのパフォーマンスは、node.jsネイティブのものと同等です。
Alex Objelean 2013

1
wro4jがnode.jsでそれほど高速ではない理由は、ほとんどの場合、実行ごとにディスクIO操作が必要だからです。これは、node.jsベースのプロセス(lesscなど)がリソースのメモリ内コンパイルを許可する場合にのみ改善できます。
Alex Objelean 2013

12
ビルドが失敗したMaven場合、このプロセスはgruntビルドの失敗をサポートしますか?
Snekse 2013年

6
正しく戻らないexecタスクはビルドに失敗するはずです。stackoverflow.com/questions/3480162/...
ベア

24

このトピックについてさらに情報を探している人のために、Yeomanの作成者の1人は、元の回答をもう少し詳しく拡張した優れた記事(この質問が最初に尋ねられてから数か月後に書かれた)を持っています。


二重の感謝!私はこの投稿が非常に役に立っていて、それが私が探していたものであったことに
ライアンJ.マクドノウ

13

次に、frontend-maven-pluginもあります。https//stackoverflow.com/a/19600777/320399 これにより、ノードとNPMがダウンロードされ(ローカルでプロジェクトに対して)、そのNPM(そのノードによって実行されます)を介してGruntがダウンロードされます。 (そのノードを介して)Gruntを実行します。これは自動ブートストラップであり、プロジェクトをビルドするためにマシンにノードをインストールする必要はありません。たった1つのコマンド。mvn install。


13

あなたはhttp://jhipster.github.io/をチェックアウトしたいかもしれません。これはYeomanジェネレーターであり、Maven、Grunt、Bowerがすべて連携して動作するアプリケーションを生成します。

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


1
新たに生成されたアプリケーションでプロジェクトを開始するには遅すぎます。しかし、これは非常に便利で、生成されたアプリケーションからいくつかのソリューションを貸してプロジェクトで使用します。ありがとう!
Matsemann

2
実際には、yeoman-maven-pluginを含めるだけでよく、これにより、すべてのJavaScript構成要素(bower、npm、grunt)を兄弟としてpom.xml(これらのファイルがIMOに属する場所)に配置できます。 mvn installは、src / main / webappの下のwebappを含む、すべてをビルドします。既存のプロジェクトをその構造に移植するのに30分もかかりませんでした。もちろん、あなたは、例えば、アプリを見ている必要がありgithub.com/jhipster/jhipster-sample-app
raven_arkadon

4

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

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

これはMavenビルドを介しGruntを実行するためのプラグインの説明です

これが役に立てば幸いです:)


答えをありがとう、それはイエスを助けますが、@ Baerの答えに従ってそれを試してみます。
void

9
言及された要点は死んでいる
Peter Butkovic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.