GradleでビルドしてJarファイルを作るときに、コンパイルしたクラスファイル以外のファイルをjarファイルに含める方法。
簡単にできそうに見えてつまづいたのでメモ。
プロジェクト構成はこんな感じ。Maven構成の方が楽だけとeclipseのプロジェクト構成で。
TestProject
└── src
│ ├── Test.java
│ └── Test2.java
├── files
│ ├── hogehoge.txt
│ ├── piyoipyo.txt
│ └── resources
│ └── foobar.txt
└── build.gradle
特に何も考えずにsrcディレクトリ指定だけ追加してビルドしただけではできたjarファイルにファイルが追加されない。
build.gradle
apply plugin: 'java'
sourceSets.main.java.srcDir 'src'
compileJava.options.encoding = "UTF-8"
$ gradle build
(出力中略)
$ jar -tf build/libs/TestProject.jar
META-INF/
META-INF/MANIFEST.MF
Test.class
Test2.class
任意のファイルを追加する際には、以下のようにbuild.gradleに追記する。
build.gradle
jar {
into('dest') {
from 'files'
}
}
intoはコピー先、fromはコピー元。上記例だとfiles以下のファイルをdestというディレクトリに配置する。
fromのディレクトリが階層構造になっていてもよしなにやってくれる。
$ gradle build
(出力中略)
$ jar -tf build/libs/TestProject.jar
META-INF/
META-INF/MANIFEST.MF
Test.class
Test2.class
dest/
dest/hogehoge.txt
dest/piyoipyo.txt
dest/resources/
dest/resources/foobar.txt