Wenn Sie eine eigenständige Anwendung für Java verteilen und die JRE einschließen, müssen Sie die Umgebung nicht festlegen. Zu diesem Zweck müssen Sie die JRE für jede Plattform in die Anwendung aufnehmen. Sie können eine JRE in voller Größe bündeln. Da Java 9 und höher Module unterstützen, ist es wünschenswert, eine JRE zu erstellen, die nur die erforderliche Menge enthält, in diesem Fall jedoch jeweils Sie benötigen die im JDK enthaltenen Dateien unter jmods für Ihre Plattform.
Es ist überraschend mühsam, das JDK für das Setup manuell herunterzuladen, daher habe ich build.gradle das folgende Skript hinzugefügt.
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'
}
Dies
gradle buildJRE
Anschließend wird das JDK heruntergeladen und eine JRE für jede Plattform in bin / jre generiert.
Laden Sie in der PrepareJDK-Aufgabe Liberica JDK 11 für Win / Mac herunter und entpacken Sie es. Die Aufgabe selbst ist einfach, aber beim Entpacken wird RelativePath verwendet, um den einstufigen Dateipfad aufzurufen. Wenn Sie das JDK normalerweise entpacken, wird ein Ordner mit der JDK-Version in Form von "jdk / win / jdk-11.0.6" erstellt. Wenn Sie jedoch das JRE erstellen, wird es für eine Weile verwendet. Da es schwierig war, werden die Dateien im Ordner eine Ebene höher gezogen.
Die Shell, die die JRE generiert (buildJRE.sh), ist die Shell, die jlink aufruft.
#!/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
Notieren Sie in MODULE die zu verwendenden Module. Das Librica JDK wird mit JavaFX geliefert, was für JavaFX-Apps sehr nützlich ist.
Ich freue mich sehr, dass die Entwicklung ernsthaft auf OpenJDK umgestellt wurde, verschiedene JDKs heruntergeladen werden können und nur die erforderlichen Module erstellt werden können.
Recommended Posts