---
keywords: [Gradle]
description: 汎用ビルドツールであるGradleの使い方についてメモしています。
author: aterai
pubdate: 2016-12-13T13:37:28+09:00
---
#contents
* Summary [#about]
* インストール [#install]
- `Windows` + `Cygwin`の環境で`SDKMAN`から`Gradle`をインストール
- `Cygwin`
-- `setup-x86_64.exe`などから、`curl`、`unzip`、`zip`をインストール
- `SDKMAN`: `Cygwin terminal`などから以下を実行してインストールし、ターミナルを再起動
curl -s "https://get.sdkman.io" | bash
- `Gradle`:
sdk install gradle
* サンプル [#example]
[https://github.com/aterai/java-swing-tips aterai/java-swing-tips]のような大量(`1000`ファイルを超える)のサブプロジェクトが存在する場合のサンプルです。
- `build.gradle`
#code{{
description 'Java Swing Tips'
allprojects {
apply {
plugin 'java'
plugin 'application'
plugin 'pmd'
plugin 'checkstyle'
}
repositories {
mavenCentral()
jcenter()
}
def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding = defaultEncoding
pmd {
consoleOutput = true
ignoreFailures = true
incrementalAnalysis = true
ruleSetFiles = files("${rootProject.projectDir}/ruleset.xml")
ruleSets = [] // ruleSetFiles のみを使用する場合は ruleSets を空にする必要がある
}
checkstyle {
ignoreFailures = true
configFile = file("${rootProject.projectDir}/checks.xml")
}
}
subprojects {
sourceSets {
main {
//デフォルトプロジェクトレイアウトでは src/main/java
java { srcDir 'src/java' }
//デフォルトプロジェクトレイアウトでは src/main/resources
resources { srcDir 'src/java' }
}
}
ext.config = new ConfigSlurper().parse(new File("${project.projectDir}/config.gradle").toURL())
mainClassName = config.main.class
// In this section you declare where to find the dependencies of your project
repositories {
flatDir { dirs "${project.projectDir}/lib" }
}
// In this section you declare the dependencies for your production and test code
dependencies {
implementation fileTree(dir: "${project.projectDir}/lib", include: '*.jar')
}
version = config.version
jar {
manifest {
attributes 'Implementation-Version': config.version,
'Implementation-Vendor': config.vendor,
'Main-Class': config.main.class,
'Class-Path': config.runtime.classpath
}
}
}
}}
- `settings.gradle`
#code{{
// サブプロジェクトとしてAccordionPanel~ZoomingAndPanningを追加
// 700ほど追加すると重い...
file('.').eachDirMatch(~/[a-zA-Z]+/) {
include it.name
}
}}
- `AccordionPanel`~`ZoomingAndPanning`以下に`config.gradle`
#code{{
vendor = 'Java Swing Tips - https://ateraimemo.com/'
version '1.0-SNAPSHOT'
year = '2003-2019'
main.class = 'example.MainPanel'
runtime.classpath = '.'
}}
* 実行方法 [#excute]
- すべてのサブプロジェクトを実行
$ gradle clean
:clean UP-TO-DATE
:AccordionPanel:clean
:ActionMap:clean
... 中略 ...
:ZoomAndPanPanel:clean UP-TO-DATE
:ZoomingAndPanning:clean UP-TO-DATE
BUILD SUCCESSFUL
Total time: 8.747 secs
`Ant`で同様に`clean`タスクを実行すると`5`秒程度
$ ant -f all.xml -Dall=clean
Buildfile: C:\tmp\jst\all.xml
all:
clean:
clean:
[delete] Deleting directory C:\tmp\jst\AccordionPanel\target
... 中略 ...
clean:
[delete] Deleting directory C:\tmp\jst\ZoomingAndPanning\target
BUILD SUCCESSFUL
Total time: 5 seconds
- サブプロジェクトを指定して実行
$ gradle :ZoomingAndPanning:check
:ZoomingAndPanning:compileJava UP-TO-DATE
:ZoomingAndPanning:processResources UP-TO-DATE
:ZoomingAndPanning:classes UP-TO-DATE
:ZoomingAndPanning:checkstyleMain
:ZoomingAndPanning:compileTestJava UP-TO-DATE
:ZoomingAndPanning:processTestResources UP-TO-DATE
:ZoomingAndPanning:testClasses UP-TO-DATE
:ZoomingAndPanning:checkstyleTest UP-TO-DATE
:ZoomingAndPanning:findbugsMain
:ZoomingAndPanning:findbugsTest UP-TO-DATE
:ZoomingAndPanning:pmdMain
:ZoomingAndPanning:pmdTest UP-TO-DATE
:ZoomingAndPanning:test UP-TO-DATE
:ZoomingAndPanning:check
BUILD SUCCESSFUL
Total time: 17.056 secs
- サブプロジェクトディレクトリを指定して実行
$ gradle clean run -q --project-dir ZoomingAndPanning/
* Reference [#reference]
- [http://gradle.monochromeroad.com/docs/userguide/userguide.html Gradle User Guide]
- [http://d.hatena.ne.jp/masanobuimai/20120528/1338213342 Gradleなんとなくわかってきた(その2) - marsのメモ]
- [https://www.ne.jp/asahi/hishidama/home/tech/groovy/gradle/index.html Gradleメモ(Hishidama's Gradle Memo)]
* コメント [#comment]
* Comment [#comment]
#comment
#comment