6

ビルドで grunt と bowerを使用するためにfrontend-maven-pluginを使用します。Frontend Maven Plugin を使用すると、NPM をローカルにインストールし、Bower を使用して Java ライブラリをダウンロードし、Grunt を実行してコードを最適化および難読化できます。

単純化して次のようにします。

<plugin>
  <groupId>com.github.eirslett</groupId>
  <artifactId>frontend-maven-plugin</artifactId>
  <version>0.0.24</version>
  <executions>
    <execution>
      <id>install node and npm</id>
      <goals> <goal>install-node-and-npm</goal> </goals>
      ...
    </execution>
    <execution>
      <id>npm-install</id>
      <goals> <goal>npm</goal> </goals>
      ...
    </execution>
    <execution>
      <id>bower-install</id>
      <goals> <goal>bower</goal> </goals>
      ...
    </execution>
    <execution>
      <id>grunt-build</id>
      <goals> <goal>grunt</goal> </goals>
      ...
    </execution>
  </executions>
</plugin>

最後の実行は grunt-build であることに注意してください。これは、JavaScript ファイルが連結され、最適化 (リターン、コメント、およびその他のものは削除されます) され、難読化される場所です。

これはリリースに適しています。ただし、開発者は、JavaScript ファイルを連結、最適化、および難読化することなく、戦争を展開したいと考えています。これはデバッグに役立ちます。grunt-buildそのためには、このプラグインの構成から実行セクションを削除するだけです。

これを行うためにプロファイルを使用したいと思います。development開発者が最後のセクションなしでビルドできるようにするプロファイルを呼び出すことができます。ファイルのこのセクションをコピーして貼り付けpom.xml、最後の実行を削除して、別のプロファイルに入れるだけです。すべて完了。

ただし、古いプログラミングの格言である「繰り返さないでください」があります。で約 50 行のコードを複製することになりますpom.xml

私がやりたいのは、最初の 3 つの実行を実行し、これが開発ビルドでない場合にのみ 4 番目を実行する方法を用意することです。これには、他にもいくつかのニップとタックがあります。たとえば、不平を言う結果ではなく、JavaScript 自体をコピーする必要があります。しかし、これは簡単に実行でき、コードを複製することもありません。

これにより、2 つの構成で を定義する必要があるため、コードが重複frontend-maven-pluginします。プロファイル用developmentに 1 回、標準リリース ビルド用に 1 回。私の知る限り、 のこの構成を実行するとは言えません。frontend-maven-pluginこれが開発ビルドでない場合は、 のこのインスタンスを実行するfrontend-maven-pluginと、単調なことしかできません。

で同じプラグインを 2 回定義し、pom.xmMaven で両方のインスタンスを正しい順序で実行する方法はありますか?

4

2 に答える 2

4

Mavenフォーラムから引用させてください:

私の結論は、すべての条件付き状況の解決策としてプロファイルにジャンプした場合、ビルドは悪いホラー映画のヒドラのように 2 番目の頭を成長させ、本当に後悔することになるということでした。

要点は、プロファイルは、Maven を正しく使用するための便利な代替手段であることが多いということです。自分が何をしているのかわからない限り、それらは常に「最後の手段」と見なされるべきです.

私の状況では、[...]。プロファイルはそのためにうまく機能しますが、ヒドラの頭が獣のどこに収まるかを正確に確認でき、絶対に必要でない限り、プロファイルでこれ以上何かをするつもりはありません.

私はプロファイルで私の経験をしました。私はこの見解を支持します。

Maven の POM は宣言型です。つまり、ビルド中に何をするかを定義するのではなく、プロジェクトがどのように見えるかを (プロジェクトオブジェクトモデル介して)宣言します。これにより、Maven はビルド中に何をいつ実行するかを認識します。XML を使用することで、厳密に階層化されたトップダウンにもなります。手続き型またはスクリプト化されたビルド定義 (宣言と定義に注意) と比較して、これらすべてが大きな利点であると考えています (唯一のものではなく、他にもいくつかあります)。) Ant や Gradle のように。Maven プロファイルを使用すると、この (階層的な) 宣言に「横向き」から何かを「注入」します。もちろん、これを行うことはできますが、自分が何をしているのかを知っている必要があり、なぜそれを行うのかを十分に考えておく必要があります.

概念的な観点から見ると、ほとんどの共通点を持つ 2 つのプロジェクトがあります。ここで、継承を伴う Maven の POM 階層が機能します。

product ... parent for all projects below
  +- pom.xml ... contains build steps (apart from Grunt) and all other declarations 
  +- dev
  |    +- pom.xml ... almost empty since everything's inherited from parent
  |    +- ... sources, resources, etc. ...
  +- release
       +- pom.xml ... contains Grunt build step only, everything else's inherited from parent
                      and redirects all of <build>
                          <outputDirectory> <testOutputDirectory>
                          <sourceDirectory> <scriptSourceDirectory> <testSourceDirectory>
                          <resources> <testResources>
                      to ../dev/<all of the dirs above>

リダイレクトされるすべてのビルド ディレクトリについては、POM リファレンスの The BaseBuild Element SetResources、およびThe Build Element Setを参照してください。

プラグイン構成用の別の pom を含む Mavenを参照してください。

唯一の正解は、継承を使用することです。

私もそれを支持します。

それでも、プロファイルを使用する場合devは、development. あなたの開発者は永遠に感謝します. :)

于 2015-10-22T22:10:34.347 に答える
3

幸運なことに、gruntそのプラグインの目的はプロパティを定義するため、カスタム プロファイルでskipこのプロパティを設定するだけで済みます。true

developmentそのため、カスタム プロパティskipGruntを に設定するtrueプロファイルと、 に設定する既定のプロファイルを作成する必要がありますfalse

次に、grunt目標のプラグイン構成で、追加できます

<configuration>
    <skip>${skipGrunt}</skip>
    <!-- rest of configuration -->
</configuration>

この発言は、より一般的にすることができます: プラグインの特定の実行をスキップする必要がある場合、通常skip、 に設定できるカスタムプロパティがありますtrue

于 2015-10-22T19:36:19.537 に答える