Gradle 运行 使用 `--add-exports`
Gradle run with `--add-exports`
我得到了 java.lang.IllegalAccessError
因为在 Java >9 中使用了 com.sun.*
class。解决方法是添加--add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls
。我不确定如何将其添加到我的 build.gradle
,但我输入了
run {
jvmArgs = ['--add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls']
}
进入它但没有帮助。 This 几乎是我遇到的问题。错误信息是:
java.lang.IllegalAccessError: class org.controlsfx.control.textfield.AutoCompletionBinding (in unnamed module @0x2d7444bc) cannot access class com.sun.javafx.event.EventHandlerManager (in module javafx.base) because module javafx.base does not export com.sun.javafx.event to unnamed module @0x2d7444bc
at org.controlsfx.control.textfield.AutoCompletionBinding.<init>(AutoCompletionBinding.java:522) ~[controlsfx-11.0.0.jar:11.0.0]
at impl.org.controlsfx.autocompletion.AutoCompletionTextFieldBinding.<init>(AutoCompletionTextFieldBinding.java:107) ~[controlsfx-11.0.0.jar:11.0.0]
at org.controlsfx.control.textfield.TextFields.bindAutoCompletion(TextFields.java:151) ~[controlsfx-11.0.0.jar:11.0.0]
[…]
at java.lang.Thread.run(Thread.java:835) [?:?]
您似乎没有模块化项目。有两种方案可以解决:
- 制作模块化项目
如果添加模块信息描述符,例如:
module hellofx {
requires javafx.controls;
requires org.controlsfx.controls;
exports org.openjfx;
}
(当然,在此处添加您的模块),它将适用于:
run {
jvmArgs = ['--add-exports= \
javafx.base/com.sun.javafx.event=org.controlsfx.controls']
}
- 导出到所有模块
由于您的项目不是模块化的,因此它是所谓的未命名模块的一部分。因此,你应该使用ALL-UNNAMED
,所以包被导出到所有模块,包括ControlsFX:
run {
jvmArgs = ['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED']
}
我得到了 java.lang.IllegalAccessError
因为在 Java >9 中使用了 com.sun.*
class。解决方法是添加--add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls
。我不确定如何将其添加到我的 build.gradle
,但我输入了
run {
jvmArgs = ['--add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls']
}
进入它但没有帮助。 This 几乎是我遇到的问题。错误信息是:
java.lang.IllegalAccessError: class org.controlsfx.control.textfield.AutoCompletionBinding (in unnamed module @0x2d7444bc) cannot access class com.sun.javafx.event.EventHandlerManager (in module javafx.base) because module javafx.base does not export com.sun.javafx.event to unnamed module @0x2d7444bc
at org.controlsfx.control.textfield.AutoCompletionBinding.<init>(AutoCompletionBinding.java:522) ~[controlsfx-11.0.0.jar:11.0.0]
at impl.org.controlsfx.autocompletion.AutoCompletionTextFieldBinding.<init>(AutoCompletionTextFieldBinding.java:107) ~[controlsfx-11.0.0.jar:11.0.0]
at org.controlsfx.control.textfield.TextFields.bindAutoCompletion(TextFields.java:151) ~[controlsfx-11.0.0.jar:11.0.0]
[…]
at java.lang.Thread.run(Thread.java:835) [?:?]
您似乎没有模块化项目。有两种方案可以解决:
- 制作模块化项目
如果添加模块信息描述符,例如:
module hellofx {
requires javafx.controls;
requires org.controlsfx.controls;
exports org.openjfx;
}
(当然,在此处添加您的模块),它将适用于:
run {
jvmArgs = ['--add-exports= \
javafx.base/com.sun.javafx.event=org.controlsfx.controls']
}
- 导出到所有模块
由于您的项目不是模块化的,因此它是所谓的未命名模块的一部分。因此,你应该使用ALL-UNNAMED
,所以包被导出到所有模块,包括ControlsFX:
run {
jvmArgs = ['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED']
}