明日から使えるgradle
-
Upload
kimukou26-kimukou -
Category
Technology
-
view
9.536 -
download
3
Transcript of 明日から使えるgradle
明日から使えるGradle
2011/07/22
@kimukou_26
はじめにお断り書き下記環境上で試行錯誤した設定を記述してております
MBA等で開発されている方にとっては、冗長で不必要な設定もあると思われます
その点に関してましては御容赦頂けると幸いです
環境WinXPSP3 32bit、Win7 32bit
JDK6u26 gradle1.0-milestone-3
今日はGradle凄いぞ!な話は話しませんw
基本の紹介スライドの紹介@literalice さん
「GradleによるG*なビルドシステムの構築」
http://www.slideshare.net/literalice/gradle-introduction
サンプル http://bit.ly/gNu4Ad
@nobeans さん
“How about Gradle?"http://d.hatena.ne.jp/nobeans/20110225/12985
98901
ユーザドキュメントの和訳サイト
@literalice さん
http://www.monochromeroad.com/artifacts/gradle/userguide/userguide.html
GitHubで翻訳活動されています
https://github.com/literalice/gradle-ja/wiki
まずGroovyを知っている方~知らない方はGroovy1.8本がつい最近出
ましたの是非読んでください~
この本を読んでから「Groovy In Action」を読み直すと理解度増すこと請け合いw
表紙はこんな本です
ではなく
@torazuka さん
こちらです。絶賛発売中です
ここで表紙特集組まれてます~
@orange_clover さん
お前の「プログラミングGROOVY」は何色だ?
http://d.hatena.ne.jp/orangeclover/20110706/1309954580
@mike_neckさん @40balmungさん
発売記念Ghello企画
@orange_clover さんまとめ
広がるGroovyプログラマの輪 #ghellofinalize()!! コードと実行結果の一部を紹介
http://d.hatena.ne.jp/orangeclover/20110714/1310649352
その他のGroovy特集Groovyistのみなさま申し訳ございません。3Dは目に有害だそうです。お詫びにGroovyの3美少女で。
http://d.hatena.ne.jp/orangeclover/20110724/1311461093
アイコンにGroovyのロゴを追加するjarを作りましたhttp://d.hatena.ne.jp/fumokmm/20110526/1306421368
Groovy物語
http://d.hatena.ne.jp/fumokmm+tale-of-groovy/
@torazuka
さん
@dekchi
さん}@fumokmm
さん
@ orange_cloverさん
ここから[本編]ページ
さて本題
Groovyって業務に使っている人
居ますか?
たぶん趣味で触っている人がほとんど?
Play FrameworkでViewにGroovy使われ
ているという話もあるけど・・・
業務で使っている人でTLで
有名な人TDDで
Grailsで
Jenkinsで@tyamaさん
@kyon_mmさん
@kiy0takaさん
7/29(金)JGGUGで
講演予定(こくちーずで募集中)
TDDに関しては@kyon_mmさん
JavaプロジェクトでGroovyを導入すべき5つの理由 http://goo.gl/q8Mrt から抜粋
1. 簡潔なループ処理
2. 明示的なPowerAssert(エラーが見やすい)
3. privateにも簡単アクセス(書き換え可能)
4. 強力なデバックプリント(dump()関数)
5. 簡単なリスト、マップ定義
でもちょっと普通の人だと導入の敷居が高いですよね
それ以外で普通の人でも導入しやすいものは?
そこでGradle の登場です
Gradleの特徴①
イメージ的には「mavenが使えるbuild.xml」
doc,src jar はivy的にDLはしないようです
Gant(AntBuilder)を拡張した物です。
DSL記述が出来ます(クロージャ記述)
Build.xmlやpom.xmlと同じように記述する事はほぼ同じなので「Groovy凄く詳しくな
いと使えない」という事はありません
Gradleの特徴②
既存の構成にファイルを少し追加するイメージで使えます
既存構成を変更する必要がありません
実行パターンが2つ選べます
Gradle本体をインストールする場合
Gradleコマンドで実行
gradleをインストールしない場合
Gradle warperで作成した gradlew bat等で実行
Gradleが得意な処(vs Maven)Groovyスクリプトなので、どこまで通ったかprint文でデバック出来る!
Gradle自体をインストール無でも実行可能
@bluepapa32さん インストールレスで Gradleしてみる http://goo.gl/XYd8s
Pom.xml、build.xmlのパースエラーや動かないときは泣きそうになりますw
Gradleが不得意な処(vs Maven①)
日本語使うときには、Javaの文字コードに引きずられてしまう(winならSJIS
GradleファイルもUTF-8管理なら実行時に要
環境変数定義
豊富なmaven用PLUGINが使えない(Pluginもまだ少ない)
set JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8
Jenkinsで使う「hpi:run 」等
Gradleが不得意な処(vs Maven②)
Maven用pluginの記述を移植等するのが
困難
Gcc使ったり、makefile連携が難
ant.execで遣るのはちょっとw な感じ
Gradleが得意な処(vs G系①)
Gantのように「ANT_HOME」「GROOVY_HOME」指定してがない!
Pluginも書けるよ(機能拡張はPluginでってRailsとかの考え方に近い?
@bluepapa32 さん プロパティファイルをnative2ascii するためのプラグインを作ってみた http://goo.gl/NFGg6
Gradleが得意な処(vs G系②)
「Groovy試してみたいけどフルDLしてイン
ストールする手間まではちょっと」にも対応可能
[buildscript]の機能を使って、インストールが少ない可搬性のよいgroovyscript実行環
境を作ることも可能
「Gradle Wrapper」の仕組みを使います
実際のMavenプロジェクトで試してみる①
今回使うプロジェクト@hakurai さん fest-swing-example をforkした
ものhttps://github.com/kimukou/fest-swing-example
元の解説スライド
Automate the Swing application
http://www.slideshare.net/hakuraipod/automate-the-swing-application-testing
実際のMavenプロジェクトで試してみる②
コンパイル設定(maven)<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source> <target>1.6</target>
</configuration>
</plugin> </plugins>
</build><properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
実際のMavenプロジェクトで試してみる③
コンパイル設定(gradle)②、③は
コンパイルバージョンJDK1.6
ソースはUTF-8だよ
の設定apply plugin: 'java'
def jdkVersion = 1.6
def enc = 'UTF-8'
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion
[compileJava, compileTestJava].each{ it.options.encoding = enc }
実際のMavenプロジェクトで試してみる④
依存記述(maven)<dependencies> <dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-swing</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency></dependencies>
実際のMavenプロジェクトで試してみる⑤
依存記述(gradle)
④、⑤はMavenからDL、クラスパス参照するjar記述
の設定
dependencies {
testCompile 'org.easytesting:fest-swing-junit-4.3.1:1.2.1'
testCompile 'junit:junit:4.8.1'
}
実際のMavenプロジェクトで試してみる⑥
実行(gradle)
set MVN_HOME=D:¥Tooldev/apache-maven-3.0.3
Set JAVA_HOME=c:¥opt¥jdk
set PATH=%JAVA_HOME%/bin;%MVN_HOME%/bin
mvn
実行(maven)
Set JAVA_HOME=c:¥opt¥jdk
set PATH=%JAVA_HOME%/bin
gradlew
gradlew –b build.gradle //ファイル名指定実行(指定しないときは build.gradle)
TestRunnerのようなGUIで実行する場合は
gradlew --gui
時間があればデモ(たぶん無いはず)
時間があればgroovyでのtestcase追加したかったけど。。
Groovyプロジェクトに変更して
GriffonのFestPluginのjarを追加すれば、DSL記述でテストコード追加できるのです
が。。
残念ながら 今回はTimeUp です
そのうち追加してみます
ここから[スクリプト実行環境としてのGradle]
ページ
たぶん話す時間はないと思う~
スクリプト実行環境としてのGradle①
GroovyConsoleやgroovyコマンドでmavenから落とせないjarを使おうとすると
ちょっと面倒
起動前に USER_HOME/.groovy/lib にjarをいれておく必要があり
でも他のGスクリプトにも影響がw
WinだとUSER_HOME=%USERPROFILE%
スクリプト実行環境としてのGradle②
下記なら実行可能だけど一般的じゃないかも
set JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8
%JAVA_HOME%/bin/java -cp ".;./lib/*" groovy.ui.GroovyMain %*
Lib
+- groovy-all-1.8.0.jar
+- ivy-2.2.0.jar
+- 追加するjar
set JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8
%JAVA_HOME%/bin/java -cp ".;./lib/*" groovy.ui.Console %*
groovy
groovyConsole
インストレスで手軽に試せる環境で下記があるんだけど・・orz
@bluepapa32さんGroovyConsole JWS
http://goo.gl/G5Boz <入力履歴機能あり
JWSの仕様のせいで下記のスクリプトは動かない><(systemClassLoader 指定が出来ない)
実行難なコード例)・・ローカルのなら出来ますSQL使ってCSVファイルからデータ抽出方法
http://goo.gl/JNaES
@GrabConfig(systemClassLoader = true)
これ駄目><
スクリプト実行環境としてのGradle③
buildscript という仕組みがあります
Gradleファイル実行時にmavenにアクセス&ク
ラスローダにライブラリ追加する仕組み
buildscript {
repositories {
mavenRepo urls:'http://msgpack.org/maven2/'
}
dependencies {
classpath("org.msgpack:msgpack:0.5.2-devel")
}
}
スクリプト実行環境としてのGradle④
従ってjavaバッチファイルとしても使えます
スクリプト例)
Msgpack を試した例
https://github.com/kimukou/gradlestudy/tree/master/msgpack
MsgPack自体の説明
http://d.hatena.ne.jp/viver/20101025/p1
gradle jar
raw=[-109, -89, 109, 115, 103, 112, 97, 99, 107, -90, 107, 117, 109, 111, 102, 1
15, -91, 118, 105, 118, 101, 114]
dst2=<java.util.ArrayList@c95717d0 elementData=[msgpack, kumofs, viver] size=3modCount=3>
BUILD SUCCESSFUL
Total time: 1 mins 37.735 secs
"====jar running start =="
src=<MyClass@196c1b0 str=msgpack num=0.4 flag=0>
raw=[-109, -89, 109, 115, 103, 112, 97, 99, 107, -53, 63, -39, -103, -103, -103,
-103, -103, -102, 0]
dst=<MyClass@1db05b2 str=msgpack num=0.4 flag=0>
"====jar running end =="
実行結果出力
ここから[IDE連携]ページ
IDE GUI Pluginに関して
Eclipse
Gradle Eclipse Pluginhttp://www.breskeby.com/downloads/gradle/eclipse/update/
解説サイト @shinyaa31 さん http://goo.gl/zeV8Z
IntelliJ
Gradle GUI plugin http://goo.gl/Y48CP
Grab plugin http://goo.gl/41swX
Community Edition でも使えます。
Groovy Pluginは標準で入っています
IDE Support Pluginに関して
こちらはProjetctFile等IDEで開くのに必要なファイルを生成するのをサポートするGradleのPluginです
gradle plugin解説ページ @waman10da さん http://goo.gl/yCLOL
未翻訳ページ http://goo.gl/tXI0b
Eclipse Plugin翻訳中ページ http://goo.gl/f1Bjn
設定値、使用例(公開が少ない)の検証まで全然出来てません><
ここから[Jenkins連携]ページ
Jenkins Gradle pluginに関して
現状GradleWarpperがSlaveノードで動かせ
ない制限がマスタノードでは実行可能
./gradlew でシェル(バッチ)実行してね
環境変数がSWITCHESで設定できるけどgradle.propertiesに設定記述しておいてbuild.gradle内で判別する方がちゃんと動く感じ
使用例
使用Jenkins Plugin
copy-to-slave
マスタからファイルをコピーするPlugin
Envfile ・・設定ファイル値を環境変数にセット
Setenv ・・JOB上で環境設定
Gradle ・・gradleビルド
Growl ・・通知
Jenkinsの管理=>システム設定
Gradle Pluginインストール
別DL、展開したGradleのパスを設定する
JOBの記述例①
JOBの記述例②
Copy-to-slave
envfilesetenv
copy-to-slaveGradleのbuild.gradle、build.propertiesファイル等の記述はほぼ同じなので、マスターからコピーする形にする構成
env-file今回のbuild.gradleファイルはgrailsをtest-appするものなので、GRAILS_HOMEの定義が必要(素のOSイメージ
Set-envPATHにGRAILS_HOMEを通す為に使用
envfile.txt の記述例
GIT_HOME=D:/Tooldev/Git
GRADLE_HOME=D:/Tooldev/gradle-1.0-milestone-3
ANT_HOME=D:/Tooldev/ant
MVN_HOME=D:/Tooldev/apache-maven-3.0.3
GRAILS_HOME=C:/opt/grails-1.3.7
GRIFFON_HOME=C:/opt/griffon-0.9.3-beta-2
GROOVY_HOME=C:/opt/groovy-1.8.0
#JAVA_HOME=c:/opt/jdk
JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8
JOBの記述例③-1Gradle warperを使った例
Wrapper構成は事前にコミット必要
VM引数等
JOBの記述例③-2
インストール済Gradleを使う例
現在のJenkins Gradle PluginだとJOB上の環境変数を引き継いでくれるように@kiy0taka さんが直してくれたので
SWITCHESの指定は特に要らないはずですとりあえず設定できるというのを図示しました
JOBの記述例④Growlの通知設定
ここではWin版を起動済みとします
Jenkins関連メモ①Growl for Windows
DLページ http://www.growlforwindows.com/gfw/
インストール後、通知許可設定が必要
Jenkins関連メモ②
スレーブ等の指定位置にソフトを入れるJENKINS_HOME/userContent にzip構成入れる
URLの設定をしておくJenkinsの管理=>システム設定
IP指定でもOK(スレーブ側が認知できる形で)
JOB側でwget等で取得
ここから[ワンポイント]ページ
ローカルjar参照の話
repositories {
flatDir(dirs: file("$projectDir/libs"))
}
dependencies {
groovy group:'', name:'sdloader', version:'jsp21‘
compile group:'', name:'swt', version:''
}
ProjectDir/lib
+- sdloader-jsp21.jar
+- swt.jar
Jar 名+「-」+バージョン名で参照されます(groupはなくてもOK)
下記の構成の時
よく使うタスク順序制御
タスク名.doFirst{ //記述 }
タスク開始時に実行する処理を書きます
タスク名.doLast { //記述 }
タスク終了後に実行する処理を書きます
タスク名.dependsOn タスク名
Build.xmlでの depensOnと同じ
Jar作成に関する記述例アーカイブ名 とバージョン名
Fat.jarと実行可能jarの話 (swt.jarだけ別同梱にする場合)
version = “jsp21“ //バージョンarchivesBaseName = ”sdloader“ //アーカイブ名
manifest.mainAttributes('Main-Class' : "sdloader.SystemTrayOpen",'Implementation-Version': version,'Class-Path': "swt.jar“
)
jar {//from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } ・・全参照でfatの場
合
from configurations.compile.collect { it.isDirectory() ? it : it.name=="swt.jar" ?:zipTree(it) }
}
既存の構成が微妙で動かないとき
GroovyファイルとJavaファイルが相互参照しているとき(位置が違うときも同じく)
resourceDir(未確認)
apply plugin: 'groovy'
sourceSets.main.groovy.srcDirs += 'src/main/java‘
sourceSets.main.java.srcDirs =[]
apply plugin: 'groovy'sourceSets.main.resources.srcDirs
参照設定等を外だしする方法build.gradleが実行ファイルとした場合
init.gradle <build.gradleより前に実行
gradle.properties
-PXXXX による指定
参考サイト http://goo.gl/MlhaB
gradle -Pyourname=literalice hello
R_HOME=C:/opt/R-2.13.0
ant.property(environment:'env')
ant.properties['env.GRADLE_OPTS']=GRADLE_OPTS
build.gradleファイルの分割
1. apply from: 'gradle/other.gradle'
2. apply plugin: 'something'
1. 参考: @bulepapa32 さん Gradle で環境ごとにあれもこれも変更するhttp://goo.gl/Nyizr から
3. @osimajp さん build.gradle から外部の Groovy スクリプトを呼び出して使う http://goo.gl/z4U9L
Win環境で動かして嵌る処「Gradle --deamon」コマンド(または下記セット)
GradleファイルをUTF-8保存
Gradleファイル上に日本語記述有り
– エラーが出て実行できないことがあり
– SJIS保存なら実行可能
– 下記の環境変数設定しても見てくれないっぽい
正規表現の記述がMac等と微妙に違う
set JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8
set GRADLE_OPTS=-Dorg.gradle.daemon=true
Win環境でじゃなくても嵌る処@fumokmm さん Gradleで--daemonオプションを付けた際にnew Fileするとうまくいかない
http://d.hatena.ne.jp/fumokmm/20110727/1311717020
Gradle標準関数を出来るだけ使いましょう の話
どうも –daemonオプション依存ではないよう
参考にすると良いサイト
Gradle:Goodnesshttp://mrhaki.blogspot.com/2009/11/gradle-goodness-creating-gradle-plugin.html
Gradle Cookbookhttp://docs.codehaus.org/display/GRADLE/Cookbook
Practicalgradlehttp://www.practicalgradle.org/blog/
ここから[メモ]ページ
Gradle Wrapperに関して①$GRADLE_HOME/bin/gradle wrapper
で作られる構成
Gradleフォルダは同じverの物コピーで基本OK
gradle-wrapper.jarはしばらく書換っていないっぽい
gradlew
gradlew.bat
gradle/
+- wrapper/
+- gradle-wrapper.jar
+- gradle-wrapper.properties
Gradle Wrapperに関して②
distributionUrl 書き換えるだけで基本問題無いです
従って閉鎖空間でも、指定位置にランタイムzip置けば使えます
#Thu Mar 10 09:37:26 JST 2011
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http¥://gradle.artifactoryonline.com/gradle/distributions/gradle-1.0-milestone-3-bin.zip
mavenからのDL時の話①
USER_HOME/.ivy2にダウンロードされますGroovyソースコード上でGrab記述して実行した場合
Mavenだと
G系のFWだとアプリキャッシュは下記に置かれます
USER_HOME/.gradle
USER_HOME/.grails
USER_HOME/.griffon
USER_HOME/.groovy/grapes
Ivy系のjarの参照情報持っている節があります
(upgrade時に動かない時にプロジェクトの参照情報を消して再実行すれば、動くようになる事も)
USER_HOME/.m2
mavenからのDL時の話②
一度DLしたモジュールは他の端末の同じ位置にコピーすればDL必要ありません
よくモジュールのDLが失敗することを経験してい
るので、コンパイルエラーで引っかかった対象フォルダ(plugin、jar)等を消して再実行する
G系のFWだとDLしたタイミングでの同時コンパ
イルはコンパイルエラーになることがある
一度 cleanコマンドを実行して再実行する事が必要
これで閉鎖空間端末でも実行OK!
この場合、短気に全消しすると嵌ります
mavenからのDL時の話②
Mavenに登録されていないjar使いたい時
GroovyConsle等
USER_PROFILE/.groovy/lib にいれて立ち上げ
G系のFW等(grails、griffon等)
PROJECT_HOME/lib にいれます
Gradle
PROJECT_HOME/lib にいれて下記記述追加
repositories {flatDir(dirs: file("$rootDir/lib"))
}
ここから[参考]ページ
G系FWでmaven参照記述①
Grails、Griffonアプリレベル[アプリ側]grails-app/conf/BuildConfig.groovy
Grails、Griffon install-plugin レベル[Plugin側]grails-app/conf/BuildConfig.groovy
Grails、Griffon pluginフォルダ参照レベル[アプリ側]
BuildConfig.groovyに下記記載
[プラグイン側]GriffonScript/_Events.groovy にmaven参照を記載
grails.plugin.location.glassfish="../grails-glassfish"
repositories {
grailsPlugins()
grailsHome()
grailsCentral()
//mavenLocal()
//mavenCentral()
//mavenRepo "http://download.java.net/maven/2/"
//mavenRepo "http://repository.jboss.com/maven2/"
}
dependencies {
runtime 'org.atmosphere:atmosphere-jgroups:0.7.2‘
}
}
アプリ側BuildConfig.groovy
def manager = griffonSettings.dependencyManager
manager.parseDependencies {
inherits "global“
resolvers {mavenRepo http://repo1.maven.org/maven2/”griffonCentral()mavenCentral()mavenRepo "http://tinkerpop.com/maven2"mavenRepo http://fortytwo.net/maven2mavenRepo http://www.orientechnologies.com/listing/m2/
}compile 'com.tinkerpop:gremlin:1.2'
}
Griffon Plugin_Events.groovy(http://goo.gl/4KK79 )
repositories {
flatDir(dirs: file("$rootDir/libs"))
mavenCentral()
mavenRepo urls: [ "http://msgpack.org/maven2/",
"http://download.java.net/maven/2/",
"http://repository.jboss.org/maven2/",
"http://repository.jboss.org/nexus/content/groups/public-jboss/"]
}
dependencies {
groovy group: 'org.codehaus.groovy', name: 'groovy-all', version: '1.8.0'
groovy group:‘’, name:‘sdloader’, version:‘jsp21‘ //ローカルjar参照例
}
比較 Gradle記述①
比較 Gradle記述②mavenRepoの記載
[Gradlle]mavenRepo の指定が複数指定可能
[Grails、Griffon」1行単位
Depenciesの記載 参考URL http://goo.gl/qCJOn
[Groovy]:Grab・・ http://mvnrepository.com/ 記述のまま
[Grails、Griffon、Gradle]
Groovyでも1.7.5からは繋げ記述で共通化できる
@Grab(group='com.sun.jna', module='jna', version='3.0.9')
Runtime group:'com.sun.jna‘ name:'jna', version:'3.0.9'
‘com.sun.jna:jna:3.0.9'
‘com.sun.jna:jna:[3.0.9,)’ //3.0.9以上の意味
参照除外の話(Groovy1.8)
GroovConsoleの場合
@irof さん SpockをGroovy1.8のGroovyConsoleから使ってみようhttp://d.hatena.ne.jp/irof/20110721/p1
@Grab('org.spockframework:spock-core:0.5-groovy-1.8')@GrabExclude('org.codehaus.groovy:groovy-all')import spock.lang.*
class HelloSpec extends Specification { }
参照除外の話(gradle)
Gradleの場合
@bluepapa32 さんGradle の依存関係を使いこ
なしてみる
http://d.hatena.ne.jp/bluepapa32/20110511/1305135686
//testCompile 'org.spockframework:spock-core:0.5-groovy-1.7'testCompile('org.spockframework:spock-core:0.5-groovy-1.8') {
exclude module: ‘org.codehaus.groovy:groovy-all'
}
Init.gradleの使い方Groovyserv0.9に適応するときの例(for win
gradle.projectsLoaded {
rootProject.allprojects {
buildscript {
repositories {}
dependencies {}
ant.property(environment:'env')
ant.properties['env.JAVA_HOME']="c:/opt/jdk"
ant.properties['env.GROOVY_HOME']="C:/opt/groovy-1.8.1“
~略~
ant.properties['env.PATH']="${ant.properties['env.GNUSTEP_PATH']};${ant.properties['env.JAVA_HOME']}/bin"
println ant.properties['env.PATH']
}
}
}
gradlew -I init.gradle -x test build
http://goo.gl/6VI2e
groovy1.8-unlimited
Groovy 1.8 finalを無視するオプション付のunlimited版がキターーーーーーッ!
http://d.hatena.ne.jp/orangeclover/20110628/1309208628
記事書いた人 @orange_cloverさん
作った人@nagai_masato さん
Gbench(http://goo.gl/c1V5q )作者
@Grab('com.googlecode.gbench:gbench:0.2.0‘)