Maven でビルドされた Web プロジェクトがあり、RequireJS コンパイラで JavaScript ファイルをコンパイルする最良の方法を見つけようとしています (この質問は、任意のコンパイラ/ミニファイアにも適用される可能性があります)。
動作するセットアップがありますが、改善が必要です:
サードパーティの JavaScript ライブラリをパッケージ化しました。それらは依存関係としてダウンロードされ、WAR Overlay プラグインに追加されています。
ターゲットディレクトリ内で RequireJS コンパイラを実行する Exec プラグイン タスクがあります。現在、パッケージ ターゲットの実行後に手動で実行exec:exec
しています (したがって、WAR の内容はターゲット ディレクトリに配置されます)。
私が代わりに望むのは、JS コンパイルをメイン (Java) コンパイルの一部にすることです。JS コンパイラ自体 (Require JS) は、コンパイル後に発生する WAR オーバーレイ フェーズ中に依存関係としてダウンロードされます。したがって、Require JS ファイルをダウンロードして解凍する必要があり、Java コンパイルの前/最中/後に、これらのファイルを使用して JS コンパイルを実行する必要があります。
これを達成するにはいくつかの方法があると確信しています。最もエレガントなソリューションを探しています。
更新: 既存の POM スニペット
zip してリポジトリ マネージャーに追加した JavaScript の依存関係があります。
<dependency>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<version>0.22.0</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<version>1.8.7</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
RequireJS 自体 (残りのライブラリのコンパイルに必要) も外部依存関係として読み込まれることに注意してください。まず、RequireJS のコンパイルを開始する前に、この依存関係をダウンロードして解凍する必要があります。
これらの依存関係は、WAR オーバーレイ プラグインを使用して WAR に追加されています。
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
<includes>
<include>requirejs/require.js</include>
<include>requirejs/require/*</include>
<include>requirejs/build/**</include>
</includes>
</overlay>
<overlay>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>
WAR に参加する必要はありませんがrequirejs/build/**
、これをオーバーレイの一部として含めて、解凍された RequireJS ビルド スクリプトを取得します。
次に、コンパイルを実行する Exec プラグイン タスクがあります。ただし、このタスクは通常のコンパイル ワークフローに追加されていないことに注意してください。WAR のパッケージ化が完了しmvn exec:exec
た後、手動で呼び出す必要があります。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>lib/requirejs/build/build.bat</executable>
<workingDirectory>${project.build.directory}/${project.artifactId}</workingDirectory>
<arguments>
<argument>name=bootstrap</argument>
<argument>out=combined.js</argument>
<argument>baseUrl=scripts</argument>
<argument>optimize=closure</argument>
<argument>excludeShallow=plugins/manifest</argument>
</arguments>
</configuration>
</plugin>
したがって、いくつかの質問は次のとおりです。
- コンパイルと WAR パッケージのステップで、単一の圧縮された依存関係のさまざまな部分を抽出するにはどうすればよいですか? それとも、2 つの zip ファイルを作成する必要がありますか?
- 理想的には、コンパイル中にトリガーする
exec:exec
か、そうでない場合は、WAR パッケージの直前にトリガーしたいと考えています。それ、どうやったら出来るの?
私は実際に成功せずにたくさんのものを試してみました.などはまだ動作します。