【发布时间】:2021-08-06 21:25:58
【问题描述】:
我正在开发一个使用 java 模块系统的 Java 11 应用程序。我需要使用反射来访问 JavaFX 库的内部函数。包含该函数的 java 模块没有导出它,所以当我运行 gradle build 任务时出现以下错误:
import com.sun.javafx.tk.TKStage;
^
(package com.sun.javafx.tk is declared in module javafx.graphics, which does not export it to module com.sampleapp)
我相信这意味着我需要做--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp,但是,我不确定如何在 gradle 中做到这一点。我尝试将其添加到applicationDefaultJvmArgs,但没有成功。
application {
...
applicationDefaultJvmArgs = listOf(
"--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp"
)
}
我也尝试将其添加到gradle.properties.kts,但没有成功。
org.gradle.jvmargs = listOf(
"--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp"
)
【问题讨论】:
-
您的第二种方法不起作用,因为它为 Gradle 守护程序设置 JVM 参数,而不是您的应用程序。您的第一种方法将起作用,但对于
run任务(并且可能会影响由distribution插件创建的脚本)。正如您所发现的,您看到的错误是编译错误,因此您需要配置编译任务(例如compileJava)。
标签: gradle javafx gradle-kotlin-dsl java-module