Gradle でプロジェクトファイル一式を ZIP アーカイブするタスクを定義する


概要

  • Gradle でプロジェクトファイル一式を ZIP アーカイブするタスクを定義する
  • 動作確認環境: Gradle 6.6 + Java 14 (AdoptOpenJDK 14.0.2)

build.gradle

plugins {
  id 'java'
}

repositories {
  mavenCentral()
}

version = '1.2.3'

dependencies {
  // 使うライブラリなどを指定
  implementation 'com.google.guava:guava:29.0-jre'
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.2'
  testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
}

// プロジェクトファイル一式を ZIP アーカイブするタスクを定義
task myZip(type: Zip) {

  // ZIP ファイルを出力するディレクトリ
  destinationDirectory = file('..') // 一つ上の階層にしておく

  // アーカイブするファイル名
  archiveFileName =
    'myapp-' +
    archiveVersion.get() + '-' +
    new Date().format('yyyyMMdd_HHmmss_SSS') + '.zip'

  // プロジェクトディレクトリ
  from '.' // カレントディレクトリ

  // Gradle による生成ファイル置き場 (build ディレクトリ) や
  // .gradle などの隠しディレクトリを ZIP ファイルに含めない
  excludes = ['build', '.*']
}

動作確認

ソースコードだけでなくテキストファイルや画像ファイルなどもプロジェクト一式に含まれていることを想定。

$ find .
.
./foodir
./foodir/foo.jpg
./foodir/foo.png
./foo.txt
./build.gradle
./src
./src/test
./src/test/resources
./src/test/resources/mytest.properties
./src/test/java
./src/test/java/myapp
./src/test/java/myapp/AppTest.java
./src/main
./src/main/resources
./src/main/resources/myapp.properties
./src/main/java
./src/main/java/myapp
./src/main/java/myapp/App.java

定義したタスク myZip を実行。

$ gradle myZip

BUILD SUCCESSFUL in 651ms
1 actionable task: 1 executed

ZIP ファイルの中身を確認。

$ unzip -l ../myapp-1.2.3-20200816_091726_068.zip 
Archive:  ../myapp-1.2.3-20200816_091726_068.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  08-16-2020 07:45   foodir/
    14526  08-16-2020 09:16   foodir/foo.jpg
    18136  10-18-2019 18:50   foodir/foo.png
       84  08-16-2020 09:14   foo.txt
      998  08-16-2020 08:51   build.gradle
        0  08-16-2020 06:59   src/
        0  08-16-2020 06:59   src/test/
        0  08-16-2020 09:16   src/test/resources/
        9  08-16-2020 09:17   src/test/resources/mytest.properties
        0  08-16-2020 06:59   src/test/java/
        0  08-16-2020 06:59   src/test/java/myapp/
      357  08-16-2020 06:59   src/test/java/myapp/AppTest.java
        0  08-16-2020 06:59   src/main/
        0  08-16-2020 09:16   src/main/resources/
        9  08-16-2020 09:16   src/main/resources/myapp.properties
        0  08-16-2020 06:59   src/main/java/
        0  08-16-2020 06:59   src/main/java/myapp/
      286  08-16-2020 06:59   src/main/java/myapp/App.java
---------                     -------
    34405                     18 files

参考資料