[JAVA] Téléchargez JDK avec Gradle et créez JRE

Lors de la distribution d'une application autonome pour Java, si vous incluez le JRE, vous n'avez pas besoin de définir l'environnement. Pour cela, vous devez inclure le JRE pour chaque plate-forme de l'application. Il est acceptable de regrouper un JRE de taille réelle, mais comme Java 9 ou version ultérieure prend en charge les modules, il est souhaitable de créer un JRE qui ne contient que la quantité nécessaire, mais dans ce cas, chaque Vous aurez besoin des fichiers sous jmods inclus dans le JDK pour votre plate-forme.

Il est étonnamment difficile de télécharger manuellement le JDK pour l'installation, j'ai donc ajouté le script suivant à build.gradle.

plugins {
  id "de.undercouch.download" version "4.0.4"
}

task prepareJDK{
  downloadAndExtractJDK("jdk/win",'http://download.bell-sw.com/java/11.0.6+10/bellsoft-jdk11.0.6+10-windows-amd64-full.zip')
  downloadAndExtractJDK("jdk/mac",'http://download.bell-sw.com/java/11.0.6+10/bellsoft-jdk11.0.6+10-macos-amd64-full.zip')
}
void downloadAndExtractJDK(jdkDir,url){
  def zipFile = "${jdkDir}/jdk.zip"
  if(file(zipFile).exists()==false){
    download {
      src url
      dest zipFile
    }
  }
  if(file("${jdkDir}/LICENSE").exists()==false){
    copy{
      from( zipTree(zipFile) ){
        include "**"  
        eachFile { fcd ->
          fcd.relativePath = new RelativePath(true, fcd.relativePath.segments.drop(1))  
        }
        includeEmptyDirs = false  
      }
      into jdkDir      
    }
  }
}
task buildJRE(type: Exec,dependsOn:prepareJDK) {
  commandLine './buildJRE.sh'
}

cette

gradle buildJRE

Ensuite, le JDK sera téléchargé et un JRE pour chaque plateforme sera généré dans bin / jre.

Dans la tâche prepareJDK, téléchargez et décompressez Liberica JDK 11 pour Win / Mac. La tâche elle-même est simple, mais lors de la décompression, elle utilise RelativePath pour extraire le chemin du fichier à un niveau. Si vous décompressez normalement le JDK, un dossier contenant la version du JDK sera créé sous la forme "jdk / win / jdk-11.0.6", mais lorsque vous créez le JRE, il sera utilisé pendant un certain temps. Comme c'était difficile, les fichiers du dossier sont remontés d'un niveau.

Le shell qui génère le JRE (buildJRE.sh) est le shell qui appelle jlink.

#!/usr/bin/env sh
MODULES="java.base,java.desktop,javafx.controls"
for PLATFORM in win mac
do
  OUTPUT_DIR=build/jre/$PLATFORM
  JMODS_DIR=jdk/$PLATFORM/jmods
  if [ -d $OUTPUT_DIR ]; then
	echo "JRE for $PLATFORM exits in $OUTPUT_DIR"
  else
	echo "creating JRE for $PLATFORM in $OUTPUT_DIR"
	jlink --compress=2 --module-path $JMODS_DIR --add-modules $MODULES --output $OUTPUT_DIR	
  fi	
done

Dans MODULES, notez les modules à utiliser. Le Librica JDK est livré avec JavaFX, ce qui est très utile pour les applications JavaFX.

Je suis très heureux que le développement ait été déplacé vers OpenJDK pour de bon, divers JDK peuvent être téléchargés et seuls les modules nécessaires peuvent être créés.

Recommended Posts

Téléchargez JDK avec Gradle et créez JRE
Comment télécharger Oracle JDK 8 rpm avec curl
Rendre l'environnement SpringBoot1.5 + Gradle4.4 + Java8 + Docker compatible avec Java11
Rendre les pages HTML dynamiques avec thymeleaf (spring + gradle)
Créez et testez des applications Java + Gradle avec Wercker
[Review] Lecture et écriture de fichiers avec java (JDK6)
Méditez la querelle entre Power Mock et Jacoco avec Gradle
Comment installer Gradle et Kotlin avec SDKMAN (Mac)
Utiliser ProGuard avec Gradle
Test d'intégration avec Gradle
Téléchargez et lancez Zipkin
Installez Gradle sur ubuntu16.04
Data Nucleus commençant par Gradle
Basculer entre JDK 7 et JDK 8
Téléchargement Java avec Ansible
Utiliser les WebJars avec Gradle
Commencez avec Gradle
Utilisez jlink avec gradle
Télécharger avec Spring Boot
Surveillez les modifications du code source avec Guard-Shell et créez et exécutez automatiquement
Premiers pas avec Reactive Streams et l'API JDK 9 Flow
Rendre Docker déroutant avec Pokemon et le rendre plus facile à attacher
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Créez un messager Facebook avec l'API Talk de api.ai et a3rt
Créez un environnement pour Rails5 et postgresql avec Docker afin que pgadmin puisse également être utilisé