Gradle a new
build tool
gradle 入門
Who presents this?
● name : mike_neck
● job : no jobs now
● specialized : Java / Groovy / Javascript
● I'm establishing a company specialized at
  Groovy products -- Grails, Gradle, SprinG
  roo.
● And I'm creating FxJsJUnit -- Javascript
  testing framework with JavaFX.
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
What's Gradle
● Antの自由さとMavenの秩序を取り入れた次世
  代のビルドツール
● 人間には優しくないXMLを捨てたビルドツール
● ビルドの設定にはGroovy DSLを採用
 ○ 設定ファイルはスクリプトに置き換わる
 ○ 直感的に読める設定ファイル
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
Ant ... 書き方忘れたorz
<build default="clean">
  <task name="build">
     <javac
  </task>
</build>
Maven ... 長い
<groupId>org.mikeneck.sample</group>
<artifactId>gradle-sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
  <plugins>
     <plugin>
        <groupId>org.apache.maven.
plugins</...
Gradle ... 簡潔!
apply plugin : 'java'
 
group = 'org.mikeneck.sample'
version = '0.0.1-SNAPSHOT'
 
sourceCompatibility = 1.6
targetCompatibility = 1.6
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
How to install? (1)
● Macの人
 ○ Brewを使っている人
   ■ sudo brew install gradle
 ○ Mac Ports使っている人
   ■ sudo port install gradle
How to install? (2)
● xnix系の人
 ○ wget http://goo.gl/WJm7L
 ○ unzip gradle-1.0-milestone-9-all.zip
 ○ sudo mv gradle-1.0-milestone-9
   /path/to/gradle_home
 ○ export
   GRADLE_HOME=/path/to/gradle_home/gradle-
   1.0-milestone-9
 ○ export PATH=$PATH:GRADLE_HOME/bin
How to install? (3)
● Macの場合は下記のディレクトリーに入れるのが
  いいかも
/Library/Frameworks/Gradle.
framework/Versions
● で、ln -s gradle-milestone-9 Current
● export
  GRADLE_HOME=/Library/Frameworks/Gr
  adle.framework/Versions/Current
How to install? (4)
● Windowsの人
 ○ http://goo.gl/WJm7L をダウンロード
 ○ gradle-milestone-9-all.zipを解凍
 ○ 作成されたフォルダをどこか適当なフォルダに配置する。
   ( 例えば C:¥gradle )
 ○ マイコンピューター→プロパティから環境変数設定画面
   を開いて以下のとおり設定する。
 GRADLE_HOME → C:¥gradle¥gradle-milestone-9
 PATH → ;%GRADLE_HOME%¥bin を追加
How to install? (5)
● インストールの確認
  ○ 適当なディレクトリー・フォルダーにて以下のコマンドを実
     行する
     $ gradle --version
 
    ● バージョンが表示されればおk。
How to install? (6)



       うまくいった?
Do you have trouble?
● Java(1.6以上)はインストールされてますか?
● 環境変数JAVA_HOMEは設定されていますか?
● 環境変数GRADLE_HOMEは設定されています
  か?
● 環境変数PATHを壊していませんか?
● Windowsのコードページは932ですか?
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
さっそくWebアプリ作ろう
1. プロジェクトホームを作成します。
2. プロジェクトホームの直下にビルドファイル(build.
   gradle)を作ります。
3. ideタスクを実行してIDEを開きます。
4. Servletを作ります。
5. テストを書きます。
6. Gradleでテスト実行、Jettyを実行します。
7. warを発行します。
1.プロジェクトホーム
$ mkdir sample-web
$ cd sample-web
$ vim sample-web
2.build.gradle
apply plugin : 'java'
apply plugin : 'idea'
apply plugin : 'eclipse'
apply plugin : 'war'
apply plugin : 'jetty'
repositories { mavenCentral() }
dependencies {
    compile 'org.apache.geronimo.specs:geronimo-servlet_2.5_spec:1.2'
    testCompile 'junit:junit:4.10'
}
sourceCompatibility = 1.6
targetCompatibility = 1.6
3. ide タスクを実行
$ gradle idea
 
または
 
$ gradle eclipse
4.Servletをつくります。
Web用のプロジェクト構造を作って、Servletを作ります。
5.テストをつくる
JMockItを使いたい人はdependenciesに加えま
しょう。
JUnit4でテストを書きます。src/test/java以下の
パッケージに記述して下さい。
6.Gradleでテストを実行
$ gradle test
でテストを実行する。
project-home/build/reports/testsにある
index.htmlにテスト結果が出力される。
こんな感じ
6.Jettyで試す
$ gradle jettyRun
デフォルトはポート8080で起動される
6.Jettyで試す
さっそくつなげてみる
7.warを発行する
$ gradle war
7.warを発行する
warファイルはproject-home/build/libs以下に作成
されます。
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
タスクをカスタマイズ
● Gradleの強みはそのカスタマイズ性にもありま
  す。
 ○ 規約に基づいたプロパティを利用できます。
 ○ Groovyの力を借りたカスタマイズが可能です。
   ■ テスト実行前にDBに値を登録する
   ■ プロジェクト作成前に規約に基づいたディレクトリを作
      成する
   ■ 発行したwarをサーバーにデプロイする
タスクをカスタマイズ
● カスタムタスクの作成
 
/** task taskName はタスクを新規に定義 **/
task customTask << { println 'do something' }
 
customTask { println 'load task' }
customTask.doFirst { println 'do first' }
customTask.doLast { println 'do last' }
 
タスクをカスタマイズ
● タスクのライフサイクルとイディオムを覚えておこ
  う
task customTask << { println 'do something' }
customTask { println 'load task' }
customTask << { println 'do task' }
customTask.doFirst { println 'do first' }
customTask.doLast { println 'do last' }
customTask << { println 'do lastly' }
 
タスクをカスタマイズ
● 実行結果
 
タスクをカスタマイズ
● タスクのライフサイクルとイディオムを覚えておこ
  う
taskObject closure    : Gradle起動時に実行する処理
customTask.doFirst closure : 最初に実行する処理
   (後に追加した処理のほうが先に実行される)
customTask.doLast closure : 最後に実行する処理
   (Left Shift と同意)
taskObject << closure : 最後に実行する処理を追加
   (後に追加した処理の方が後に実行される)
Agender
●   What's Gradle
●   Comparison with Ant, Maven
●   How to install?
●   Let's make Web Application!
●   Task customization
●   Convention Properties
規約プロパティを参照する
$ gradle properties を実行する
規約プロパティを再設定する
例えばコンパイルはJava6で、実行環境はJava5の
場合は以下のように
 
sourceCompatibility = 1.6
targetCompatibility = 1.5
 
既存の規約プロパティを上書きする
規約プロパティを利用する
例えば依存ライブラリーのパスが欲しい場合
 
task showPath {
    project.configurations.each {
        println it.name
        println it.asPath
    }
}
 
規約プロパティを利用する
実行結果
練習
規約どおりのディレクトリーツリーを作るタスクを定
義してみよう
 
ヒント : ディレクトリーを作る方法
  ant.mkdir ( dir : 'src/main/java' )
解答例
def langs = ['java']
task structure << {
    project.sourceSets.each { set ->
        langs.each { lang ->
            ant.mkdir dir : "src/${set.name}/${lang}"
        }
    }
}
Note
● Gradle Home Page
  ○ http://www.gradle.org
● User Guide
  ○ http://www.gradle.
     org/docs/current/userguide/userguide_single.
     html
● DSL Reference
  ○ http://www.gradle.org/docs/current/dsl/index.
     html
Enjoy your
project with Fun!
         presented by mike_neck

Gradle a new Generation Build Tool