Gradle - ビルドツール †
書きかけの記事
Gradle とは †
Gradle はAndroid Atudio のビルドツールとして採用されるなど、次世代のビルドツールとして注目されている。
ビルド用のスクリプトは GroovyのDSL で簡潔に記述することができる一方で、複雑な箇所は Groovyスクリプトで記述する事も可能。
CoC(設定を超える規約)に則っており、規約に従う事によってビルドスクリプト記述量が大幅に削減できるうえに、
デフォルト設定の上書きも可能な為、規約にハマらない場合にも対応可能となっている。
※フォルダ構成等の規約は 基本的に Maven と同じ。
インストール方法 †
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
動作確認を兼ねた練習 †
簡単なタスクを作成し、実行してみる
build.gradle の作成 †
適当なディレクトリを作成し、配下に以下のファイルを作成する。(ファイル名:build.gradle)
| // テスト用タスクの実行 | task hello << { | println "hello!" | } |
|
[選択]
タスクの実行 †
[選択]
結果:
| :hello | hello! | | BUILD SUCCESSFUL | | Total time: 2.415 secs |
|
[選択]
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ファイルなどを作る | |
build | assemble後にテストを実行する | |
buildDependents | そのプロジェクト“が”依存するプロジェクトを含めbuildを実行する | |
classes | メインクラスをassembleする | |
clean | 成果物(buildディレクトリ配下)を削除する | |
compileJava | プロダクトのコンパイルを行う | |
compileTestJava | テストコードをコンパイルする | |
jar | メインクラスを含むJarファイルを作成する | |
processResources | プロダクトのリソースをクラスディレクトリにコピーする | |
processTestResources | テストリソースをテストクラスディレクトリにコピーする | |
testClasses | テストクラスをassembleする | |
uploadArchives | 成果物をアップロードする | |
tasks | 実行可能なタスクを確認する | |
基本形 †
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 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" |
|
[選択]
JVMパラメータを指定する †
メインクラスを指定する †
build.gradle
| mainClassName = "org.gradle.sample.Main" |
|
[選択]
コマンドライン引数で指定されたクラスを実行する †
build.gradle
| run { | // 引数で指定されたクラスを実行する | if (project.hasProperty('main')) { | main(project.main) | } | } |
|
[選択]
実行例
gradle run -Pmain="TestApp1" |
|
[選択]
※TestApp1.java の main メソッドが実行される。