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と統合しやすいアプローチはプラスです。

前もって感謝します!

4

5 に答える 5

73

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

Javaベースのツール

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

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

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

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

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

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

JavaScriptベースのツールでハングアップする可能性があるのは、コンパイルを実行する必要のあるすべてのマシンにNodenpmgrunt-cli / gulpが必要になることだけです。CIマシンにアクセスできない場合、またはアーティファクトベースのデプロイを使用していない場合、これは難しい販売になる可能性があります。

これをMavenプロジェクトに統合するのは非常に簡単で、かなりの数のオプションがあります。Maven ant-runプラグインを使用するか、ant execタスクを実行してMavenから呼び出すか、何よりもmavenexecタスクを使用することができます。
以下は、誰かに役立つ場合に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>
于 2013-04-12T06:44:40.463 に答える
24

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

于 2013-08-23T18:11:08.713 に答える
13

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

于 2013-10-27T21:16:28.357 に答える
13

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

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

于 2013-12-02T15:43:34.577 に答える
4

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

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

Mavenビルドを介してGruntを実行するためのプラグインの説明は次のとおりです

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

于 2013-04-04T07:17:12.373 に答える