小ネタ。
GradleでJavaのコンパイルするバージョンなどを指定する際、お決まりで
apply plugin: 'java' sourceCompatibility = 1.8 targetCompatibility = '1.8'
のように記述するが、ここに列挙型が使える。
ただ、毎回クラス名が何だったか忘れるのでメモ。
sourceCompatibility などの仕様と JavaVersion 列挙型
JavaPluginExtension の sourceCompatibility
や targetCompatibility
をみると、型が JavaVersion になっている。
よくある記述例のように、数値や文字列を設定すると、 JavaVersion#toVersion(Object)
メソッドで、JavaVersionに変換されている模様。
JavaVersion は別途importなどせずに使用可能。また、 targetCompatibility
のデフォルトは sourceCompatibility
なので、通常省略できる。
apply plugin: 'java' sourceCompatibility = JavaVersion.VERSION_1_8 // targetCompatibility = JavaVersion.VERSION_1_8
Gradleのバージョンで利用可能なJavaのバージョンが列挙型の値として宣言されているため、JavaVersionを使えば記述ミスなどが起こらないのがメリットか。
枯れたバージョンならともかく、常にGradleが対応する最新のJavaを使って動作検証などしたい場合には、 JavaVersion.VERSION_HIGHER
も使える。
ただ、新しいバージョンのJavaの動作検証をしたい場合、Gradle v6.7 以降の Toolchain を使うほうが無難だと思うので、需要はなさそうだが。
なお、 Toolchain を使うときの、ビルド用Javaバージョン指定には、 JavaLanguageVersion を使う。こちらはインターフェースで、ファクトリーメソッド JavaLanguageVersion#of(int)
または JavaLanguageVersion#of(String)
でインスタンスを生成する模様。
java {
toolchain {
languageVersion = JavaLanguageVersion.of(14)
}
}
振り返り
初期設定で書いたら終わりなので、毎回「クラス名なんだっけ、う~ん」となっては過去につくったプロジェクトを見て設定、をやり続けているので、いい加減アウトプットしてみる。
JavaVersion に JavaLanguageVersion 実装しておいてくれれば、Gradleの実行とToolchainでのビルドに使用するJavaのバージョンを簡単に合わせられるんだけどなぁ。