Модуль JavaFX не экспортирует в неназванный модуль - PullRequest
0 голосов
/ 07 января 2020

Я создаю приложение JavaFX с использованием Gradle (с Kotlin и TornadoFX). Сборка и запуск он работает нормально с нижеприведенной сборкой Gradle и IntelliJ, но, используя плагин приложения и запуская приложение, я получаю следующую ошибку:

Caused by: java.lang.IllegalAccessError: superinterface check failed: class de.codecentric.centerdevice.javafxsvg.SvgImageLoaderFactory (in
 unnamed module @0x591c2277) cannot access class com.sun.javafx.iio.ImageLoaderFactory (in module javafx.graphics) because module javafx.gr
aphics does not export com.sun.javafx.iio to unnamed module @0x591c2277

Ниже приведен мой скрипт сборки Gradle. Как я могу решить это.

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.50'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

application {
    mainClassName = 'MainKt'
}

javafx {
    version = "13"
    modules = ['javafx.controls', 'javafx.base', 'javafx.graphics']
}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
    maven {
        url "https://plugins.gradle.org/m2/"
    }
    maven {
        url "http://4thline.org/m2"
    }
}

dependencies {
    ...
}

tasks.test {
    useJUnitPlatform()
    testLogging {
        events("passed", "skipped", "failed")
    }
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

1 Ответ

1 голос
/ 08 января 2020

Поскольку я работал с немодульным проектом и полагался на модули JavaFX, именно это и вызвало ошибки при выполнении

> gradle run

. Я добавил следующее в свой файл Gradle:

run {
    applicationDefaultJvmArgs = ['--add-exports=javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.glass.ui=ALL-UNNAMED',
    ]

    jvmArgs = ['--add-exports=javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.glass.ui=ALL-UNNAMED',
    ]
}

Причина "applicationDefaultJvmArgs" заключается в том, что плагин gradle приложения использует его для настройки аргументов jvm вместо "jvmArgs".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...