概要

インストール

  • Windows + Cygwinの環境でSDKMANからGradleをインストール
  • Cygwin
    • setup-x86_64.exeなどから、curlunzipzipをインストール
  • SDKMAN: Cygwin terminalなどから以下を実行してインストールし、ターミナルを再起動
    curl -s "https://get.sdkman.io" | bash
  • Gradle:
    sdk install gradle

サンプル

aterai/java-swing-tipsのような大量(1000ファイルを超える)のサブプロジェクトが存在する場合のサンプルです。
  • build.gradle
#spanend
#spanadd
description 'Java Swing Tips'
#spanend
#spanadd

#spanend
#spanadd
allprojects {
#spanend
  apply {
    plugin 'java'
    plugin 'application'
    plugin 'pmd'
    plugin 'checkstyle'
  }
#spanadd

#spanend
  repositories {
    mavenCentral()
    jcenter()
  }
#spanadd

#spanend
  def defaultEncoding = 'UTF-8'
  [compileJava, compileTestJava]*.options*.encoding = defaultEncoding
#spanadd

#spanend
  pmd {
    consoleOutput = true
    ignoreFailures = true
    incrementalAnalysis = true
    ruleSetFiles = files("${rootProject.projectDir}/ruleset.xml")
    ruleSets = [] // ruleSetFiles のみを使用する場合は ruleSets を空にする必要がある
  }
#spanadd

#spanend
  checkstyle {
    ignoreFailures = true
    configFile = file("${rootProject.projectDir}/checks.xml")
  }
#spanadd
}
#spanend
#spanadd

#spanend
#spanadd
subprojects {
#spanend
  sourceSets {
    main {
      //デフォルトプロジェクトレイアウトでは src/main/java
      java { srcDir 'src/java' }
      //デフォルトプロジェクトレイアウトでは src/main/resources
      resources { srcDir 'src/java' }
    }
  }
#spanadd

#spanend
  ext.config = new ConfigSlurper().parse(new File("${project.projectDir}/config.gradle").toURL())
#spanadd

#spanend
  mainClassName = config.main.class
#spanadd

#spanend
  // In this section you declare where to find the dependencies of your project
  repositories {
    flatDir { dirs "${project.projectDir}/lib" }
  }
#spanadd

#spanend
  // In this section you declare the dependencies for your production and test code
  dependencies {
    implementation fileTree(dir: "${project.projectDir}/lib", include: '*.jar')
  }
#spanadd

#spanend
  version = config.version
  jar {
    manifest {
      attributes 'Implementation-Version': config.version,
                 'Implementation-Vendor': config.vendor,
                 'Main-Class': config.main.class,
                 'Class-Path': config.runtime.classpath
    }
  }
#spanadd
}
#spanend
#spanadd
  • settings.gradle
#spanend
#spanadd
// サブプロジェクトとしてAccordionPanel~ZoomingAndPanningを追加
#spanend
#spanadd
// 700ほど追加すると重い...
#spanend
#spanadd
file('.').eachDirMatch(~/[a-zA-Z]+/) {
#spanend
  include it.name
#spanadd
}
#spanend
#spanadd
  • AccordionPanelZoomingAndPanning以下にconfig.gradle
#spanend
#spanadd
vendor = 'Java Swing Tips - https://ateraimemo.com/'
#spanend
#spanadd
version '1.0-SNAPSHOT'
#spanend
#spanadd
year = '2003-2019'
#spanend
#spanadd

#spanend
#spanadd
main.class = 'example.MainPanel'
#spanend
#spanadd
runtime.classpath = '.'
#spanend
#spanadd

実行方法

  • すべてのサブプロジェクトを実行
$ 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/

参考リンク

コメント