Попытка запустить исполняемый файл jar приложения JavaFX - Ошибка: отсутствуют компоненты времени выполнения JavaFX

Я создал приложение JavaFX 11, которое готово к развертыванию.

Я использую Gradle 5.0 в качестве инструмента сборки и эту команду для компиляции jar:

jar {
    manifest {
        attributes(
                'Main-Class': 'checkmydigitalfootprint.MainApp'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
 }

Затем в командной строке я пробовал разные команды для запуска файла JAR:

java -jar CheckMyDigitalFootprint.jar

java -jar CheckMyDigitalFootprint.jar --module-path="/users/joseph/eclipse-workspace/javafx-sdk-11.0.1/lib" --add-modules=javafx.controls

java -jar CheckMyDigitalFootprint.jar --module-path="/users/joseph/eclipse-workspace/javafx-sdk-11.0.1/lib" --add-modules=javafx.controls --add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED --add-exports=javafx.base/com.sun.javafx.reflect=ALL-UNNAMED --add-exports=javafx.base/com.sun.javafx.beans=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.glass.utils=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED

Но все приводят к одной и той же ошибке:

Error: JavaFX runtime components are missing, and are required to run this application

Остальная часть build.gradle:

plugins {
  id 'application'
  id 'org.openjfx.javafxplugin' version '0.0.5'
  id 'eclipse'
}

repositories {
    mavenCentral()
}

dependencies {
    /* uncomment for cross-platform jar: */
//    compile "org.openjfx:javafx-graphics:11:win"
//    compile "org.openjfx:javafx-graphics:11:linux"
    compile "org.openjfx:javafx-graphics:11:mac"
    compile 'com.jfoenix:jfoenix:9.0.8'
    compile 'org.json:json:20180813'
    compile 'com.google.api-client:google-api-client:1.23.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    compile 'com.google.apis:google-api-services-gmail:v1-rev83-1.23.0'
    compile group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.1'
    compile 'com.sun.activation:javax.activation:1.2.0'  
    compile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.2'
    testCompile "org.testfx:testfx-core:4.0.15-alpha"
    testCompile "org.testfx:testfx-junit:4.0.15-alpha"
}

javafx {
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

run {
    if (osdetector.os == 'windows') {
        // Temporal fix for Eclipse with JDK 1.8 and Windows 
        systemProperty "java.library.path", "C:\tmp"
    }
}

jar {
    manifest {
        attributes(
                'Main-Class': 'checkmydigitalfootprint.MainApp'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
 }

mainClassName = 'checkmydigitalfootprint.MainApp'

4 ответа

Решение

Это объясняется на официальном сайте OpenJFX

Решение простое, просто добавьте следующую опцию VM:

--module-path /path/to/javafx-sdk-11.0.1/lib --add-modules=javafx.controls,javafx.fxml

для вашего проекта Gradle примените JavaFX Gradle плагин

plugins {
  id 'application'
  id 'org.openjfx.javafxplugin' version '0.0.5'
}

добавьте необходимые модули. например:

javafx {
    modules = [ 'javafx.controls' ]
}

Укажите версию JavaFX

javafx {
    version = "11.0.+"
}

Надеюсь, это поможет вам:)

Вы решаете проблему, используя этот

Java -jar --module-path /path/to/javafx-sdk-11.0.1/lib --add-modules=javafx.controls,javafx.fxml (путь к вашему файлу jar)

Чтобы также решить эту проблему..... Вы можете создать еще один основной класс помимо предоставленного основного класса javafx, а затем вызвать основной класс javafx из созданного вами основного класса. Таким образом, вы можете создать исполняемый jar-файл со всем присутствующим модулем времени выполнения javafx и создать установщик из jar-файла. Это в основном применимо, когда вы используете любой jdk выше 8.

У меня нет опыта работы с Gradle, но у меня была такая же проблема с работающей jar, дающей сообщение "Отсутствуют компоненты времени выполнения JavaFX...". (Используя openJDK/JFX 11.) Даже когда аргументы vm были правильно включены в командную строку. Проблема заключалась в опции "Обработка библиотеки" для создания исполняемого jar-файла. "Извлечь необходимые библиотеки..." не помогло. "Пакет требуемых библиотек..." был правильным вариантом для создания исполняемого файла jar с зависимостью JavaFX.

Другие вопросы по тегам