Gradle 再入門
May 8th, 2022
Tomoyo Takayama
What is Gradle
ビルド自動化ツール
https://docs.gradle.org/current/userguide/userguide.html
Groovy or Kotlin DSLで実装
今日はGroovyを使ってHands on しましょうー
Hands on 準備
1. JDKのインストール
2. Gradleのインストール
https://docs.gradle.org/current/userguide/installation.html#installation
Gradle でプロジェクト作成
https://docs.gradle.org/current/samples/sample_building_java_applications.html
Java Applicationを作成
1. mkdir demo
2. cd demo
3. gradle init
作成したプロジェクトのファイルを確認
Gradle build Lifecycle
1. 初期化(③settings.gradle)
2. 設定(④build.gradle)
3. タスク実行
# build コマンド実行
./gradlew build
# jar etcが作成される
app/build/libs/app.jar
③settings.gradle
Multi Projectの場合はBuildするprojectをここで指定
include(‘proj1’)
include(‘proj2’)
…
rootProject.name = 'demo'
include('app’)
include(‘proj1’)
include(‘proj2’)
…
④build.gradle
plugins {
id 'application'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
//This dependency is used by the application.
implementation 'com.google.guava:guava:30.1.1-jre'
}
application {
// Define the main class for the application.
mainClass = 'demo.App'
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
build.gradle は、project毎に必要
Gradle
project instance(for App)
TaskContainer内でTask保持
Task1(clean)
Task2(check)
…
project instance(for Proj1)
TaskContainer内でTask保持
Task1(clean)
Task2(check)
…
Script interface がGroovy DSLで
実装されることでビルドされ
る
settings.gradleで指定した
projectのインスタンスを生成
して、各Taskを実行すること
でbuild(例:jars作成)
Type of script Delegates to instance of
(Script objectが保持している)
Build script Project
Init script Gradle
Setting script Settings
④build.gradle
plugins {
id 'application’
id ‘java’ <- 通常はこれ
id ‘org.gradle.java’ <- org.gradle はCore Gradle plugin namespace
}
https://docs.gradle.org/current/userguide/plugins.html
https://docs.gradle.org/current/javadoc/org/gradle/plugin/use/PluginDependenciesSp
ec.html
https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html
https://docs.gradle.org/current/dsl/org.gradle.plugin.use.PluginDependenciesSpec.ht
ml
Plugins script block
必ず先頭に記述
Buildに必要な処理を追加
plugins DSLが解決
④build.gradle
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.RepositoryHandler.htm
l
RepositoryHandlerが、
「https://repo.maven.apache
.org/maven2/」URLへアク
セスしている
④build.gradle
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
//This dependency is used by the application.
implementation 'com.google.guava:guava:30.1.1-jre'
}
https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.DependencyHandler.ht
ml
DependencyHandler
④build.gradle
version = ‘1.0.0’ <- versioを追加すると「app-1.0.0.jar」が作成される
https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
VersionはProject Interfaceで
定義されている
Taskを追加してみましょうー
task Hello {
doLast() {
println "Hello Gradle!"
}
}
# Hello taskを実行
./gradlew -q Hello
Hello Gradle! と表示される
https://docs.gradle.org/current/dsl/org.gradle.api.Task.html
doLast, or doFirstでTaskの
Actionを実装
追加したactionをログで確認
task Hello {
doLast() {
println "Hello Gradle!"
}
}
# Hello taskを実行
./gradlew Hello --debug
#-------
2022-05-04T09:37:31.088+0900 [DEBUG] [org.gradle.api.internal.tasks.execution.TaskExecution] Executing actions
for task ':app:Hello'.
2022-05-04T09:37:31.088+0900 [QUIET] [system.out] HelloGradle!
…
https://docs.gradle.org/current/dsl/org.gradle.api.Task.html
dubugログでactionの実行タ
イミングを確認
Groovy delegate
class Person {
String name
}
classThing{
String name
}
def p = new Person(name:'Taro')
def t = newThing(name:'Teapot')
def upperCaseName = {
delegate.name.toUpperCase()
}
upperCaseName.delegate = p;
println upperCaseName()
upperCaseName.delegate = t;
println upperCaseName()
…
# 実行
../gradlew tasks
# 結果
> Configure project :app
TARO
TEAPOT
delegate先と元で同じ
name propertiesがあるので、
nameを大文字にする処理
を upperCaseName に委任

Gradle再入門.pptx