Gradle запустить с `--add-exports` - PullRequest
       27

Gradle запустить с `--add-exports`

1 голос
/ 24 сентября 2019

Я получил java.lang.IllegalAccessError из-за использования com.sun.* класса в Java> 9.Решением этой проблемы является добавление --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']
}

в него, и это не помогло. Это в значительной степени моя проблема.Сообщение об ошибке:

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) [?:?]

1 Ответ

1 голос
/ 24 сентября 2019

Похоже, у вас нет модульного проекта.Есть два варианта решения:

  • Создание модульного проекта

Если вы добавите дескриптор информации модуля, например:

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']
}
...