[JAVA] Laden Sie JDK mit Gradle herunter und erstellen Sie JRE

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

Laden Sie JDK mit Gradle herunter und erstellen Sie JRE
So laden Sie Oracle JDK 8 U / min mit Curl herunter
Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel
Machen Sie HTML-Seiten mit Thymeleaf dynamisch (Frühling + Gradle)
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)
Vermitteln Sie mit Gradle den Streit zwischen Power Mock und Jacoco
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)
Verwenden Sie ProGuard mit Gradle
Integrationstest mit Gradle
Laden Sie Zipkin herunter und starten Sie es
Installieren Sie Gradle auf ubuntu16.04
Datenkern beginnend mit Gradle
Wechseln Sie zwischen JDK 7 und JDK 8
Java-Download mit Ansible
Verwenden Sie WebJars mit Gradle
Beginnen Sie mit Gradle
Verwenden Sie jlink mit gradle
Mit Spring Boot herunterladen
Überwachen Sie Quellcodeänderungen mit der Guard-Shell und erstellen und führen Sie sie automatisch aus
Erste Schritte mit Reactive Streams und der JDK 9 Flow API
Verwechseln Sie Docker mit Pokemon und erleichtern Sie das Anhängen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Erstellen Sie einen Facebook Messenger mit der Talk-API von api.ai und a3rt
Erstellen Sie mit Docker eine Umgebung für Rails5 und postgresql, damit auch pgadmin verwendet werden kann