ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

Gradle勉強中

最近Gradle勉強中です。
僕はそもそもMavenやIvyもよく分かっていないのですが、無理やり飛び級してみました。
今はドキュメント読み進め中です。英語不得意なのでなかなか進まない。

Gradleのセットアップ

Groovyベースのビルド管理ツールGradleを使ってみる - 豆無日記がとてもわかりやすい。

Gradleのプロジェクト作成スクリプト

$GRADLE_HOME/samples/groovy/quickstart
のフォルダをどこかにコピーして、リネームするとGroovyのプロジェクトが完成。
この方法でもよいが、Groovyプロジェクト作成スクリプトも作成してみた。
PATHの通った場所において、

groovy mkpjGradle.groovy testproject

でOK。(testprojectの部分には、自分のプロジェクト名を入力。)
カレントディレクトリ以下にプロジェクトフォルダが作成される。

mkpjGradle.groovy
#!/usr/bin/env groovy
def error = null;
try{
	if( args.size() <= 0 ){
		error = 1
		throw new Exception("Parameter args[0] is not set.");
	}
	def projectHome = new File(args[0])
	if( projectHome.exists() ){
		error = 2
		throw new Exception("Directory is exists.");
	}
	
	print "Please input Groovy Version to want to use(default ${GroovySystem.version}):"
	def groovyVersion = System.in.newReader().readLine()?:GroovySystem.version
	if( !(groovyVersion ==~ /^\d\.\d\.\d$/) ){
		error = 3
		throw new Exception("Groovy Version is invalid.");
	}
	
	print "Please input Project Version(default 1.0.0):"
	def projectVersion = System.in.newReader().readLine()?:"1.0.0"
	if( !(projectVersion ==~ /^\d\.\d\.\d$/) ){
		error = 4
		throw new Exception("Project Version is invalid.");
	}
	
	projectHome.mkdirs()
	new File("${projectHome}/build.gradle").write """\
usePlugin("groovy")

sourceCompatibility = 1.6
version = "${projectVersion}"

repositories {
    flatDir(dirs: "\$rootDir/lib")
	mavenCentral()
}

dependencies {
	groovy "org.codehaus.groovy:groovy:${groovyVersion}"
	testCompile "junit:junit:4.8.1"
}

task jarWithZipFileSet(type : Jar){
	zipFileSet(dir: "\$rootDir/lib")
	new File("\$rootDir/build/classes").listFiles().findAll{ it.directory }.each{
		zipFileSet(dir: it.path)
	}
}
"""
	new File("${projectHome}/src/main/java").mkdirs()
	new File("${projectHome}/src/main/groovy").mkdirs()
	new File("${projectHome}/src/main/resources").mkdirs()
	new File("${projectHome}/src/test/java").mkdirs()
	new File("${projectHome}/src/test/groovy").mkdirs()
	new File("${projectHome}/src/test/resources").mkdirs()
	new File("${projectHome}/lib").mkdirs()
	new File("${projectHome}/bin").mkdirs()
	showreports = new File("${projectHome}/bin/showreports")
	showreports.write """\
#!/bin/bash
firefox build/reports/tests/index.html &
"""
	showreports.executable = true
	
	println "SUCCESSFUL"
} catch (Exception e){
	println "FAILURE:${e.message}"
	System.exit(error?:99)
}

使ってみた感想

作成したGroovyスクリプトをプロジェクトメンバーに公開するのは、実行環境のセットアップなどの問題で難しかったりする。でもGradleでマニフェスト付jarで提供できるとそういう問題も解決かな?と思ってみている。

2010/01/31追記

ちょっとスクリプト名をgrails、griffonっぽくしてみた。

2010/02/01追記

またちょっと変更。プロジェクト内で使用するGroovyのバージョン指定がない場合には、実行中のGroovyのバージョンがデフォルト値となるようにしてみた。(id:kiy0takaさん、id:uehajさんに教えていただいた。)

2010/07/26追記

gralde test実行結果がbuild/reports/tests/index.html に出力されるがそれをfirefoxで閲覧するためのスクリプトも追加出力。

$ bin/showreports

で閲覧可能。

プロジェクトのバージョンも指定できるようにした。

2010/07/30追記

以下の lib フォルダが作成されるように変更。
ここにjarファイルを配置するとbuild.graldeに設定したjarはまずlibフォルダにあるかどうかを参照する。
なければMaven Central Repositoryを探しにいく。

プロジェクトホーム
	|-- bin
	|-- build
	|-- build.gradle
	|-- lib
	`-- src
2010/08/05追記

*いい加減githubとかにあげないとなぁww

以下のコマンドを実行すれば、jarファイル作成時にプロジェクトフォルダのlib以下のjarファイルを含めてくれる。
配布が楽。

gradle jarWithZipFileSet
広告を非表示にする