背景
参画していたプロジェクトでbuild.gradleに以下の記載があった。
どういう意図で書かれたものなのかわからなかったので調べてみた。
build.gradle
sourceSets {
main {
java {
srcDirs 'src/main/java'
srcDirs 'src/main/restapi'
srcDirs 'src/main/test'
}
}
}
Gradleビルド時にコンパイルされるものされないもの
基本的に、標準構造に従っているソースについては、sourceSets
の記載なしで正常にコンパイルされます。
標準構造
・src/main/java #メインのソースコード
・src/main/resources #メインのリソース
・src/test/java #テストコード
・src/test/resources #テストのリソース
しかし、上記の標準構造に従っていないソースについては、Gradleが見つけることができないため、コンパイルされない。
今回でいうと、src/main/restapi
がそれにあたる。
そういった標準構造に従っていないディレクトリを、build.gradle内のsourceSets
に記載してあげることで、Gradleがソースの場所を理解し、コンパイルできるようになる。
結論
sourceSetsに記載が必要なディレクトリは、標準構造に則っていないディレクトリのみ。
そのため正しくは、以下のようになる。
build.gradle
sourceSets {
main {
java {
srcDirs 'src/main/restapi'
}
}
}
余談
①リソースファイルのディレクトリはresourcesブロックに指定すること
Javaブロックに入れると、GradleがJavaファイルと勘違いしてコンパイルしようとして、エラーが起きる場合あり。
build.gradle
sourceSets {
main {
resources {
srcDirs 'src/***/resources'
}
}
}
②コンパイル対象から外したいJavaファイルがあれば以下のように設定する
build.gradle
sourceSets {
main {
java {
srcDirs 'src/main/java'
excluded '**/Test.java' #コンパイル対象外となる
}
}
}