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