JavaFX 模块不导出到未命名模块
JavaFX module does not export to unnamed module
我正在使用 gradle(使用 Kotlin 和 TornadoFX)构建 JavaFX 应用程序。构建和 运行 它与下面的 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"
}
由于我使用的是非模块项目并且依赖于 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"。
我正在使用 gradle(使用 Kotlin 和 TornadoFX)构建 JavaFX 应用程序。构建和 运行 它与下面的 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"
}
由于我使用的是非模块项目并且依赖于 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"。