OpenJDK11 est sorti en septembre 2018. Si vous utilisez Java pour les projets d'entreprise, vous avez probablement beaucoup de JDK11. De plus, j'ai entendu des personnes qui utilisent déjà JDK8 mais qui souhaitent adopter JDK11 pour certains nouveaux projets.
J'utilise JDK8 cette fois, mais quand j'ai commencé à vérifier avec JDK11, je me suis demandé quel type de paramètres de construction serait bon si je voulais prendre en charge (construire) à la fois JDK8 et JDK11 dans la construction avec Gradle. .. Il convient de noter que les modifications apportées au JDK, la modification de l'application due à la mise à niveau de la version, le réglage, etc. sont des éléments nécessaires, mais ils sont exclus de cet article. Je veux juste me concentrer sur la façon de changer dynamiquement le JDK au moment de la construction.
sourceCompatibility
, targetCompatibility
de build.gradle
Je pense que la version JDK est souvent spécifiée comme une valeur fixe dans build.gradle
. (Ou répertorié dans gradle.properties
)
L'image est la suivante.
build.gradle
...
sourceCompatibility = 1.8
targetCompatibility = 1.8
...
Ou si vous mettez la valeur dans gradle.properties
build.gradle
...
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
...
gradle.properties
...
javaVersion=1.8
...
C'est une image.
Je veux changer dynamiquement au moment de la construction, donc la définition de build.gradle
est
build.gradle
...
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
...
Et définissez-le avec une variable.
JAVA_HOME
dans les paramètres au moment de la constructionVous pouvez spécifier le paramètre avec -Pkey = valeur
de gradle
. Vous pouvez l'utiliser pour spécifier la version JDK au moment de l'exécution, par exemple gradle build -PjavaVersion = 1.11
. Vous devez également spécifier le JDK utilisé par Gradle. Cela peut être spécifié avec le paramètre «org.gradle.java.home».
Donc
gradle build -PjavaVersion=1.11 -Dorg.gradle.java.home="C:\java\11 --info"
N'est-ce pas bon de faire comme ça?
Créez la structure du projet comme suit.
C:
└─src
└─main
├─java
│ └─sample
│ └─gradle
│ └─multiversion
│ Sample.java
└─resources
build.gradle
plugins {
id 'java-library'
}
repositories {
jcenter()
}
dependencies {
}
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
Construire avec JDK11.
>gradle build -PjavaVersion=1.11 -Dorg.gradle.java.home="C:\java\11"
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
Vérifiez la version construite avec javap -v
pour le fichier de classe réellement compilé.
Comme vous pouvez le voir dans le résultat de l'exécution ci-dessous, vous pouvez voir qu'il est construit avec version majeure: 55
et JDK11.
C:\workspace\sample-gradle-multiversion>javap -v build\classes\java\main\sample\gradle\multiversion\Sample.class
Classfile /C:/workspace/sample-gradle-multiversion/build/classes/java/main/sample/gradle/multiversion/Sample.class
Last modified 2019/07/12; size 576 bytes
MD5 checksum 580cd2384cb91a31c14e09339617ba75
Compiled from "Sample.java"
public class sample.gradle.multiversion.Sample
minor version: 0
major version: 55
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // sample/gradle/multiversion/Sample
super_class: #6 // java/lang/Object
interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #6.#20 // java/lang/Object."<init>":()V
#2 = Fieldref #21.#22 // java/lang/System.out:Ljava/io/PrintStream;
#3 = String #23 // Hello world.
#4 = Methodref #24.#25 // java/io/PrintStream.println:(Ljava/lang/String;)V
#5 = Class #26 // sample/gradle/multiversion/Sample
#6 = Class #27 // java/lang/Object
#7 = Utf8 <init>
#8 = Utf8 ()V
#9 = Utf8 Code
#10 = Utf8 LineNumberTable
#11 = Utf8 LocalVariableTable
#12 = Utf8 this
#13 = Utf8 Lsample/gradle/multiversion/Sample;
#14 = Utf8 main
#15 = Utf8 ([Ljava/lang/String;)V
#16 = Utf8 args
#17 = Utf8 [Ljava/lang/String;
#18 = Utf8 SourceFile
#19 = Utf8 Sample.java
#20 = NameAndType #7:#8 // "<init>":()V
#21 = Class #28 // java/lang/System
#22 = NameAndType #29:#30 // out:Ljava/io/PrintStream;
#23 = Utf8 Hello world.
#24 = Class #31 // java/io/PrintStream
#25 = NameAndType #32:#33 // println:(Ljava/lang/String;)V
#26 = Utf8 sample/gradle/multiversion/Sample
#27 = Utf8 java/lang/Object
#28 = Utf8 java/lang/System
#29 = Utf8 out
#30 = Utf8 Ljava/io/PrintStream;
#31 = Utf8 java/io/PrintStream
#32 = Utf8 println
#33 = Utf8 (Ljava/lang/String;)V
{
public sample.gradle.multiversion.Sample();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 6: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lsample/gradle/multiversion/Sample;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello world.
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 10: 0
line 12: 8
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 args [Ljava/lang/String;
}
SourceFile: "Sample.java"
Gardez gradle clean
pour supprimer le fichier de classe construit avec JDK 11.
C:\workspace\sample-gradle-multiversion>gradle clean -PjavaVersion=1.11
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
Puis compilez avec JDK8.
C:\workspace\sample-gradle-multiversion>gradle build -PjavaVersion=1.8 -Dorg.gradle.java.home="C:\java\8"
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
Vérifiez le fichier de classe. Vous pouvez voir qu'il a été construit avec version majeure: 52
et JDK8.
C:\workspace\sample-gradle-multiversion>javap -v build\classes\java\main\sample\gradle\multiversion\Sample.class
Classfile /C:/workspace/sample-gradle-multiversion/build/classes/java/main/sample/gradle/multiversion/Sample.class
Last modified 2019/07/12; size 576 bytes
MD5 checksum ea23dd24700da60b773d93f8ff2f9d77
Compiled from "Sample.java"
public class sample.gradle.multiversion.Sample
minor version: 0
major version: 52
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // sample/gradle/multiversion/Sample
super_class: #6 // java/lang/Object
interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #6.#20 // java/lang/Object."<init>":()V
#2 = Fieldref #21.#22 // java/lang/System.out:Ljava/io/PrintStream;
#3 = String #23 // Hello world.
#4 = Methodref #24.#25 // java/io/PrintStream.println:(Ljava/lang/String;)V
#5 = Class #26 // sample/gradle/multiversion/Sample
#6 = Class #27 // java/lang/Object
#7 = Utf8 <init>
#8 = Utf8 ()V
#9 = Utf8 Code
#10 = Utf8 LineNumberTable
#11 = Utf8 LocalVariableTable
#12 = Utf8 this
#13 = Utf8 Lsample/gradle/multiversion/Sample;
#14 = Utf8 main
#15 = Utf8 ([Ljava/lang/String;)V
#16 = Utf8 args
#17 = Utf8 [Ljava/lang/String;
#18 = Utf8 SourceFile
#19 = Utf8 Sample.java
#20 = NameAndType #7:#8 // "<init>":()V
#21 = Class #28 // java/lang/System
#22 = NameAndType #29:#30 // out:Ljava/io/PrintStream;
#23 = Utf8 Hello world.
#24 = Class #31 // java/io/PrintStream
#25 = NameAndType #32:#33 // println:(Ljava/lang/String;)V
#26 = Utf8 sample/gradle/multiversion/Sample
#27 = Utf8 java/lang/Object
#28 = Utf8 java/lang/System
#29 = Utf8 out
#30 = Utf8 Ljava/io/PrintStream;
#31 = Utf8 java/io/PrintStream
#32 = Utf8 println
#33 = Utf8 (Ljava/lang/String;)V
{
public sample.gradle.multiversion.Sample();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 6: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lsample/gradle/multiversion/Sample;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello world.
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 10: 0
line 12: 8
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 args [Ljava/lang/String;
}
SourceFile: "Sample.java"
sourceCompatibility
, targetCompatibility
de build.gradle
Recommended Posts