JavaFX exportierte Jar ohne beim starten die Libs hinzufügen?

AgentP

Mitglied
Guten Tag,
ich versuche schon eine weile mein JavaFX Projekt zu exportieren, ohne beim Start der .Jar die Libs (javafx.controls, javafx.graphics, javafx.fxml usw.) hinzufügen zu müssen. Also einfach die .Jar ausführen und dann soll die Anwendung starten.
Ich habe es mit Gradle versucht (falls das überhaut geht), hat aber nicht funktioniert.
Ich habe ein Beispielprojekt von Github dafür genutzt, um es zu testen. Das exportieren der Jar über Gradle funktioniert, aber beim starten ist wohl was mit der Manifest-Datei fehlerhaft (bin mir aber nicht sicher).

Würde mich freuen, wenn mir einer dabei helfen könnte. Habe nicht sehr viel Ahnung von Gradle, bitte für die Antworten berücksichtigen :-D

build.gradle:

Java:
plugins {
    id 'application'
    id 'eclipse'
    id 'org.openjfx.javafxplugin' version '0.0.13'
    id 'org.beryx.jlink' version '2.24.4'
}

group 'com.mechanitis'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

javafx {
    version = "18"
    modules = ['javafx.controls', 'javafx.graphics', 'javafx.fxml']
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

test {
    useJUnitPlatform()
}

application {
    mainModule.set('com.mechanitis.demo.javafxgradle')
    mainClass.set('com.mechanitis.demo.javafxgradle.HelloFX')
}

jar {
    manifest {
        attributes 'Main-Class': 'com.mechanitis.demo.javafxgradle.HelloFX'
    }
}


java {
    modularity.inferModulePath.set(true)
}
 
In Gradle bin ich nicht bewandert, aber hab folgendes gefunden:
Java:
jar {
  manifest {
    attributes(
      "Class-Path": configurations.compile.collect { it.getName() }.join(' '))
  }
}

Werden die Libs denn auch korrekt ins Build-Verzeichnis kopiert?
 
Diese Idee der ausführbaren jar Dateien ist mit Java 9 von Oracle eigentlich abgelöst worden durch sogenannte Images, die dann alles enthalten, was zur Ausführung notwendig ist. Dazu dient dann das Tool JLink, welches hier alles zusammen baut. Und ab Java 14 dann die Möglichkeit, daraus mittels JPackage ein AppImage oder Installer zu bauen.

Das Vorgehen wird in https://openjfx.io/openjfx-docs/ gut beschrieben. Da werden die üblichen Szenarien alle abgedeckt angefangen von manuellem vorgehen über die Nutzung von Gradle und Maven hin zur Nutzung in den Entwicklungsumgebungen.
 

Zurück
Oben