Maven を Groovy スクリプト上で実行

Groovy スクリプト上で Maven を実行するには下記のような単純なスクリプトを用意するだけです。

  • Groovy 2.1.6
  • Maven 3.0.5

ソースは http://github.com/fits/try_samples/tree/master/blog/20130731/

mvn_run.groovy (Maven 実行スクリプト)
@Grab('org.apache.maven:maven-embedder:3.0.5')
import org.apache.maven.cli.MavenCli

MavenCli.main(args)

ただし、環境によっては下記のようなエラーが発生するかもしれません。

実行(失敗時)
> groovy mvn_run.groovy

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [download failed: org.apache.maven.wagon#wagon-provider-api;2.4!wagon-provider-api.jar]
java.lang.RuntimeException: Error grabbing Grapes -- [download failed: org.apache.maven.wagon#wagon-provider-api;2.4!wagon-provider-api.jar]
・・・

この場合は下記を実施して、再度 mvn_run.groovy を実行すれば正常に動作するようになるかもしれません。(環境によっては上手くいかないかも)

  • .groovy/grapes/org.apache.maven.wagon を削除
  • .m2/repository/org/apache/maven/wagon/wagon-provider-api を一時的にリネームする(例 wagon-provider-api_temp)

なお、plexus-classworlds 等で同様のエラーが発生する場合は同じ様に処理します。(.m2/repository/org/codehaus/plexus/plexus-classworlds)

上手くいけば実行に成功します。

実行(成功時)
> groovy mvn_run.groovy -f work/sample-app/pom.xml clean package -Dmaven.test.skip=true
・・・
[INFO] Scanning for projects...
・・・
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
・・・

実行に成功すれば、リネームした .m2/repository/org/apache/maven/wagon/wagon-provider-api や plexus-classworlds 等を元に戻します。