Gradle - ビルドツール

Gradle とは

Gradle はAndroid Atudio のビルドツールとして採用されるなど、次世代のビルドツールとして注目されている。
ビルド用のスクリプトは GroovyのDSL で簡潔に記述することができる一方で、複雑な箇所は Groovyスクリプトで記述する事も可能。
CoC(設定を超える規約)に則っており、規約に従う事によってビルドスクリプト記述量が大幅に削減できるうえに、
デフォルト設定の上書きも可能な為、規約にハマらない場合にも対応可能となっている。
※フォルダ構成等の規約は 基本的に Maven と同じ。

インストール方法

(1) 公式サイトのDOWNLOADS からGradleをダウンロード
http://gradle.org/gradle-download/

(2) ダウンロードしたzipを解凍し、環境変数 GRADLE_HOME に解凍したディレクトリのPATHを設定する

(3) GRADLE_HOME/bin にPATHを通す

Gradleプロジェクトの作成

gradle init --type java-library

type には pom、java-application、java-library、scala-library、groovy-library、groovy-application、basic などが指定できる。
https://docs.gradle.org/current/userguide/build_init_plugin.html

Gradleが期待する基本的なディレクトリ構成

規約に従ったディレクトリ構成の場合は、ビルドスクリプトの大幅な記述量削減が可能となる。
ただし Maven と違い、記述を加える事によって規約に合わないディレクトリ構成でもビルドが可能となっている。
以下、Gradleが期待するディレクトリ構成(Mavenと同じ)

プロジェクトルート  
+--- build.gradle(ビルドスクリプト)  
+--- src  
      +--- main
      |     +--- java
      |     +--- resources(propertiesファイルなど)  
      |     +--- config
      |     +--- webapp (webアプリの場合)
      |                +--- WEB-INF
      |                            +--- classes
      |                            +--- lib
      |                            +--- web.xml
      |  
      +--- test
            +--- java
            +--- resources

タスク

"gradle" に続けてタスク名を入力する事で、該当のタスクを実行する事ができる

gradle init --type java-library

以下、主なタスクの一覧(他、詳細は後述)

タスク説明実行例
initプロジェクトを作成するgradle init --type java-library
gradle init --type java-application
assembleコンパイルを実行しJAR、WAR、ZIP、TARファイルなどを作る
buildassemble後にテストを実行する
buildDependentsそのプロジェクト“が”依存するプロジェクトを含めbuildを実行する
classesメインクラスをassembleする
clean成果物(buildディレクトリ配下)を削除する
compileJavaプロダクトのコンパイルを行う
compileTestJavaテストコードをコンパイルする
jarメインクラスを含むJarファイルを作成する
processResourcesプロダクトのリソースをクラスディレクトリにコピーする
processTestResourcesテストリソースをテストクラスディレクトリにコピーする
testClassesテストクラスをassembleする
uploadArchives成果物をアップロードする
tasks実行可能なタスクを確認する

基本形

apply plugin: 'java'

// In this section you declare where to find the dependencies of your project
repositories {
    jcenter()
}

jar {
    manifest {
        // net.magata.example.TestMain をメインクラスとする場合
        attributes 'Main-Class': 'net.magata.example.TestMain'
    }
}

dependencies {
    compile 'グループID:アーティファクトID:バージョン'

    // Use JUnit test framework
    testImplementation 'junit:junit:X.XX'
}

タスクの作成

簡単なタスクを作成し、実行してみる

新規タスクの作成

適当なディレクトリを作成し、配下に以下のファイルを作成する。(ファイル名:build.gradle)

task hello {
    doLast {
        println  "hello!"
    }
} 

ショートカット記法を使用する場合

task hello << {
    println  "hello!"
} 

タスクの実行方法

./gradlew hello

結果:

:hello
hello!

BUILD SUCCESSFUL

Total time: 2.415 secs

タスクに依存関係を追加する

task myTask1 {
    doLast {
        println "This is myTask1"
    }
}

task myTask2(dependsOn: myTask1) {
    doLast {
        println "This is myTask2"
    }
}

実行

./gradlew myTask2

> Task :myTask1
This is myTask1

> Task :myTask2
This is myTask2

BUILD SUCCESSFUL in 0s

タスクに後処理を追加する

task myTask1 {
    doLast {
        println "This is myTask1"
    }
}

myTask1.doLast {
    print "After myTask1"
}

実行

./gradlew myTask1

> Task :myTask1
This is myTask1
After myTask1
BUILD SUCCESSFUL in 0s

Tips

プラグインの追加

build.gradle

apply plugin: 'java'
apply plugin: 'application'

または

plugins {
    id 'java'
    id 'application'
}

デフォルトタスクの設定

build.gradle

defaultTasks 'タスク名1'  'タスク名2'

コマンドライン引数をメインクラスに渡す

run {
    if (project.hasProperty('args')) {
        args project.args.split('\\s+')
    }
}

実行例

./gradlew run -Pargs="arg1 arg2"

JVMパラメータを指定する

build.gradle

applicationDefaultJvmArgs = ["-Xms1024m", "-Xmx1024m"]

http://gradle.monochromeroad.com/docs/userguide/application_plugin.html

関連: JavaVMのチューニングメモ

メインクラスを指定する

./gradlew run 時に実行するメインクラスを指定する

mainClassName = "org.gradle.sample.Main"

Javaのバージョンを指定する

apply plugin: 'java'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

ソースの文字コードを指定する

compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'

コマンドライン引数で指定されたクラスを実行する

run {
    // 引数で指定されたクラスを実行する
    if (project.hasProperty('main')) {    
        main(project.main)
    }   
}

実行例

./gradlew run -Pmain="TestApp1"

※TestApp1.java の main メソッドが実行される。

test 実行時に標準出力への出力内容を表示する

test {
    testLogging.showStandardStreams = true
}

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS