Gradle JavaFX模块不会导出到未命名模块
我正在使用gradle、Kotlin和TornadoFX构建一个JavaFX应用程序。构建和运行它与下面的gradle build和IntelliJ配合得很好,但是使用应用程序插件并运行应用程序时,我得到以下错误:Gradle JavaFX模块不会导出到未命名模块,gradle,kotlin,javafx,tornadofx,Gradle,Kotlin,Javafx,Tornadofx,我正在使用gradle、Kotlin和TornadoFX构建一个JavaFX应用程序。构建和运行它与下面的gradle build和IntelliJ配合得很好,但是使用应用程序插件并运行应用程序时,我得到以下错误: Caused by: java.lang.IllegalAccessError: superinterface check failed: class de.codecentric.centerdevice.javafxsvg.SvgImageLoaderFactory (in u
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之所以存在,是因为applicationGradle插件使用它来配置jvm参数,而不是jvmArgs。因为我使用的是一个非模块项目,并且依赖于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之所以存在,是因为application gradle插件使用它来配置jvm参数,而不是jvmArgs。您是否尝试将包的导出添加到未命名模块中?这里可以找到一个例子:感谢您的回复。这个问题确实有帮助。我遇到的问题是,应用程序插件需要applicationDefaultJvmArgs,而不是jvmArgs。但是,对于将来需要帮助的任何人,请为返回该错误的任何包添加-add导出。您是否尝试将该包的导出添加到未命名模块中?这里可以找到一个例子:感谢您的回复。这个问题确实有帮助。我遇到的问题是,应用程序插件需要applicationDefaultJvmArgs,而不是jvmArgs。但是,是的,对于将来需要帮助的任何人,为返回该错误的任何包添加-add导出。非常感谢您的回答!它帮助了我:很好的答案,我花了2天的时间寻找解决方案。非常感谢你的回答!它帮助了我:很好的答案,我花了2天时间寻找解决方案。