Gradle:sourceCompatiblityとtargetCompatibility
1. 概要
この記事では、sourceCompatbilityとtargetCompatibilityJavaの構成の違いと、Gradleでの使用法について説明します。
基本について詳しくは、Gradleの概要の記事をご覧ください。
2. Javaでのバージョンの処理
javac を使用してJavaプログラムをコンパイルする場合、バージョン処理用のコンパイルオプションを提供できます。 利用可能な2つのオプションがあります。
- -Javaバージョンと一致する値を持つソース、コンパイルに使用しているJDK まで(たとえば、JDK8の場合は1.8)。 私たちが提供するバージョン値は、ソースコードで使用できる言語機能をそれぞれのJavaバージョンに制限します。
- -target も同様ですが、生成されるクラスファイルのバージョンを制御します。 これは、提供するバージョン値がプログラムが実行できる最も低いJavaバージョンになることを意味します。
例えば:
javac HelloWorld.java -source 1.6 -target 1.8
これにより、を実行するために
3. Gradleでバージョンを処理する
Gradleは、Javaプラグインとともに、のsourceCompatibilityおよびtargetCompatibility構成を使用して、sourceおよびtargetオプションを設定できます。 ]javaタスク。 同様に、はjavac。と同じ値を使用します
build.gradleファイルを設定しましょう。
plugins {
id 'java'
}
group 'com.baeldung'
java {
sourceCompatibility = "1.6"
targetCompatibility = "1.8"
}
4. HelloWorldAppコンパイル例
Hello Worldを作成できます! コンソールアプリを作成し、上記のスクリプトを使用してビルドして機能をデモンストレーションします。
非常に単純なクラスを作成しましょう。
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
gradle build コマンドを使用してビルドすると、GradleはHelloWorldApp.classという名前のクラスファイルを生成します。
Javaにパッケージ化されているjavapコマンドラインツールを使用して、このクラスファイルの生成されたバイトコードバージョンを確認できます。
javap -verbose HelloWorldApp.class
これは多くの情報を出力しますが、最初の数行で次のことがわかります。
public class com.baeldung.helloworld.HelloWorldApp
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
major version フィールドの値は52で、これはJava8クラスファイルのバージョン番号です。 これは、 HelloWorldApp.classがJava8以降を使用してのみ実行できることを意味します。
sourceCompatibility 構成をテストするために、ソースコードを変更して、Java6では使用できない機能を導入できます。
ラムダ式を使用してみましょう:
public class HelloWorldApp {
public static void main(String[] args) {
Runnable helloLambda = () -> {
System.out.println("Hello World!");
}
helloLambda.run();
}
}
Gradleを使用してコードをビルドしようとすると、コンパイルエラーが発生します。
error: lambda expressions are not supported in -source 1.6
-source オプションは、Javaで sourceCompatibility Gradle構成に相当し、コードがコンパイルされないようにします。 基本的に、は、上位バージョンの機能を誤って使用しないように保護します。たとえば、アプリをJava6ランタイムでも実行できるようにしたい場合があります。
5. 結論
この記事では、-sourceおよび-targetコンパイルオプションを使用して、Javaソースコードのバージョンとターゲットランタイムを処理する方法について説明しました。 さらに、これらのオプションがJavaプラグインを使用してGradleのsourceCompatbilityおよびtargetCompatibility構成にどのようにマッピングされるかを学び、実際にそれらの機能を示しました。
いつものように、この記事のソースコードはGitHubでから入手できます。