---
keywords: [Gradle]
description: 汎用ビルドツールであるGradleの使い方についてメモしています。
author: aterai
pubdate: 2016-12-13T13:37:28+09:00
---
#contents

* 概要 [#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]のような、大量(`AccordionPanel`~`ZoomingAndPanning`で`700`ほど)のサブプロジェクトが存在する場合のサンプルです。

- `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 = []
    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]
- [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