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.gradleJe 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.gradleRecommended Posts