書きかけの記事
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 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
簡単なタスクを作成し、実行してみる
適当なディレクトリを作成し、配下に以下のファイルを作成する。(ファイル名:build.gradle)
// テスト用タスクの実行 task hello << { println "hello!" }
gradle hello
結果:
:hello hello! BUILD SUCCESSFUL Total time: 2.415 secs
規約に従ったディレクトリ構成の場合は、ビルドスクリプトの大幅な記述量削減が可能となる。
ただし 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ファイルなどを作る | |
build | assemble後にテストを実行する | |
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
apply plugin: 'java' apply plugin: 'application'
または
plugins { id 'java' id 'application' }
build.gradle
defaultTasks 'タスク名1' 'タスク名2'
build.gradle
run { if (project.hasProperty('args')) { args project.args.split('\\s+') } }
実行例
gradle run -Pargs="arg1 arg2"
build.gradle
applicationDefaultJvmArgs = ["-Xms1024m", "-Xmx1024m"]
※http://gradle.monochromeroad.com/docs/userguide/application_plugin.html
関連: JavaVMのチューニングメモ
build.gradle
mainClassName = "org.gradle.sample.Main"
build.gradle
run { // 引数で指定されたクラスを実行する if (project.hasProperty('main')) { main(project.main) } }
実行例
gradle run -Pmain="TestApp1"
※TestApp1.java の main メソッドが実行される。