maven2gradle を使ってみた(メモ)

既存の maven プロジェクトを maven2gradle を使って gradle でビルドして Tomcat 上で動かすところまでいったのでメモ。

※とにかく動かすことを最優先にした&そもそも Gradle あまりしらないので色々おかしいことをしてるかもしれません。鵜呑みにしないでください。突っ込み歓迎です。

環境

maven2gradle のインストール

GitHub - jbaruch/maven2gradle: Maven2 to Gradle build converter の下の方にある installation を参照。

maven2gradle.bat の修正

そのまま maven2gradle とやると NoClassDefFoundError が発生。 %GRADLE_HOME%/lib にある ant と maven2gradle.bat で指定してる ant のバージョンが違ってる模様。以下のとおり 1.8.1 -> 1.8.2 に修正。

set CLASSPATH=%GRADLE_HOME%\lib\maven2gradle-1.0-SNAPSHOT.jar;%GRADLE_HOME%\lib\groovy-all-1.7.10.jar;%GRADLE_HOME%\lib\ant-launcher-1.8.2.jar;%GRADLE_HOME%\lib\ant-1.8.2.jar;

Maven2Gradle.groovy の修正・ビルド

今度は GitHub - jbaruch/maven2gradle: Maven2 to Gradle build converter の一番目にある例外が発生。 Maven3 を使えとあるけどそもそも Maven3 しか入れてないはず・・ホワイ?

調べてみると Make the plugin runnable again plus other improvements by hansd · Pull Request #12 · jbaruch/maven2gradle · GitHub がヒットしたので、なんかよくわからんまま github からソース落としてきて一番下のコメント通り Maven2Gradle.groovy を修正、ビルドしたものを使ったらめでたく build.gradle が生成された。

// arg(line: """-Doutput=${fileName} org.apache.maven.plugins:maven-help-plugin:2.2-SNAPSHOT:effective-$file""")
arg(line: """-Doutput=${fileName} help:effective-$file""")

build.gradle の修正

providedCompile

生成された build.gradle を実行すると providedCompile なんてないよーとか怒られたので gradle-user - providedCompile for Java/JAR を参考に以下のとおり修正。

上記訂正。後述の war プラグインを有効化したら通った。

// providedCompile "javax.servlet:servlet-api:2.5"
compile ("javax.servlet:servlet-api:2.5") { provided = true }
Maven リポジトリにない依存ライブラリの対応

http://groovy.my-notebook.net/b71a4d9d-a61d-416c-b012-610d1eef95c4.html を参考にローカルリポジトリの指定を無理やり追加。

repositories {
  mavenCentral()
  mavenRepo urls: ['file:/D:/dev/.m2/repository']
}

~/.groovy/grapeConfig.xml に指定してみたけど効かなかった。なんか間違ってるかもしらん。

encoding 指定の追加

Windows 環境なので CP932 で読もうとしてこけていた。 mike、mikeなるままに…: Gradle、ちょっと面倒な所 を参考にさせていただきましたm(__)m

def defaultEncoding = 'UTF-8'
compileJava {
	options.encoding = defaultEncoding
}
compileTestJava {
	options.encoding = defaultEncoding
filtering 指定の追加

maven ではプロパティファイルでフィルタリングしてたのでフィルタリング設定を追加。gradle-user - add token filter in processResources task あたりを参考に・・というかかなりパクリ。

Properties props = new Properties()
props.load(new FileInputStream('src/main/filters/local/build.properties'))
project.setProperty('props', props)

processResources {
	from(sourceSets.main.resources.srcDirs) {
		filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: project.props)
	}
}

この方法だと maven 形式のプレースホルダ( ${value} )を ant 形式( @value@ )に変える必要がある。

war プラグイン?の追加
apply plugin: 'war'

ビルド実行

gradle war

これでようやく war が出来上がり。とりあえず Tomcat7 に放り込んで動くことを確認。


わりとさらっとはいかないな。元々依存ライブラリ管理とビルドぐらいしかしてない pom でこんな感じ。 maven -> gradle 移行へのとっかかりとして、これをもとにがりがりいじるような感じで使うぐらいのイメージかなぁ。とりあえず色々適当なのであとでちゃんと調べよう。

久々にブログ書いたら疲れた・・。暴風雨は大丈夫かな。