mavenとclosure-compilerの統合方法はclosure-compilerのイシュートラッカーのIssue 37: Maven integrationで紹介されています。
ただ、ここで紹介されている方法は、リポジトリにコミットされているclosure-compilerのjarを呼び出す方法です。
なるべくjarをコミットしてたくないので、mavenの依存関係としてダウンロードされたjarを利用する方法について調べてみました。
次の設定でmavenの依存関係としてダウンロードされたclosure-compilerが利用できます。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="closure.compiler.class.name"
value="com.google.javascript.jscomp.CommandLineRunner" />
<echo message="Generate fantastic.min.js" />
<java classname="${closure.compiler.class.name}"
classpathref="maven.compile.classpath" fork="true" failonerror="true">
<arg value="--js"/>
<arg value="${basedir}/src/main/webapp/js/fantastic.js"/>
<arg value="--js_output_file"/>
<arg value="${basedir}/src/main/webapp/js/fantastic.min.js" />
<arg value="--compilation_level"/>
<arg value="SIMPLE_OPTIMIZATIONS"/>
</java>
</target>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>r706</version>
</dependency>
</dependencies>
</plugin>
pluginから利用するjarの定義はplugin直下のdependenciesで定義します。この定義によりmaven.compile.classpathにclosure-compilerが含まれます。
<plugin>
....
<dependencies>
<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>r706</version>
</dependency>
</dependencies>
</plugin>
呼び出し部分抜粋です。この例ではfantastic.jsからfantastic.min.jsを生成しています。
<property name="closure.compiler.class.name"
value="com.google.javascript.jscomp.CommandLineRunner" />
<echo message="Generate fantastic.min.js" />
<java classname="${closure.compiler.class.name}"
classpathref="maven.compile.classpath" fork="true" failonerror="true">
<arg value="--js"/>
<arg value="${basedir}/src/main/webapp/js/fantastic.js"/>
<arg value="--js_output_file"/>
<arg value="${basedir}/src/main/webapp/js/fantastic.min.js" />
<arg value="--compilation_level"/>
<arg value="SIMPLE_OPTIMIZATIONS"/>
</java>
mavenのリポジトリの登録されているclosure-compier.jarのMANIFEST.MFには次のMain-Classが存在しません。
Main-Class: com.google.javascript.jscomp.CommandLineRunner
そのため、mavenのクラスパスの中からcom.google.javascript.jscomp.CommandLineRunnerを探すように指定をしています。
<property name="closure.compiler.class.name"
value="com.google.javascript.jscomp.CommandLineRunner" />
<echo message="Generate fantastic.min.js" />
<java classname="${closure.compiler.class.name}"
classpathref="maven.compile.classpath" fork="true" failonerror="true">