【问题标题】:Task 'run' causes: org.joor.ReflectException: java.lang.NoSuchFieldException: javaExecHandleBuilder - Gluon Mobile Project任务“运行”原因:org.joor.ReflectException:java.lang.NoSuchFieldException:javaExecHandleBuilder - Gluon 移动项目
【发布时间】:2020-09-21 17:49:10
【问题描述】:

当我尝试在 NetBeans 中运行我的整个项目时,我收到以下错误日志:

...
Task :run FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> org.joor.ReflectException: java.lang.NoSuchFieldException: javaExecHandleBuilder

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 4s

不知道怎么回事,我在 build.gradle 中指定了主类...请帮忙!

【问题讨论】:

  • 这是一个已知的issue。目前,请使用 Gradle 6.5 或更低版本。
  • 呃!多么痛苦……无论如何,谢谢你的帮助……
  • 顺便说一句,我收到警告:没有为主类提供模块,假设是当前模块。最好以以下格式提供“mainClassName”:“$moduleName/a.b.Main”
  • 那是什么……?我使用的是 Gradle 6.6.1,降级到 6.3(NetBeans 附带的默认版本)

标签: javafx gluon-mobile


【解决方案1】:

我找到了使用 Gradle 6.6 或更高版本开发 JavaFX 项目的解决方案。您需要删除 javafx-gradle-plugin 并使用 Gradle 本身的 JPMS 支持。删除 javafx-gradle-plugin 后,您需要自己维护 JavaFX 依赖项。这是build.gradle 设置的示例。

plugins {
    id 'application'
}

def currentOS = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
def platform
if (currentOS.isWindows()) {
     platform = 'win'
} else if (currentOS.isLinux()) {
     platform = 'linux'
} else if (currentOS.isMacOsX()) {
     platform = 'mac'
}

java {
    modularity.inferModulePath = true
}

dependencies {
    implementation "org.openjfx:javafx-base:15.0.1:${platform}"
    implementation "org.openjfx:javafx-controls:15.0.1:${platform}"
    implementation "org.openjfx:javafx-graphics:15.0.1:${platform}"
    implementation "org.openjfx:javafx-fxml:15.0.1:${platform}"
}

application {
    mainModule = 'com.your.module'
    mainClass = 'com.your.package.Main'
}

在您的 module-info.java 文件中,您需要声明 require JavaFX 模块。

module com.your.module {

    requires javafx.base;
    requires javafx.controls;
    requires javafx.graphics;
    requires javafx.fxml;

    opens com.your.package to javafx.fxml;

    exports com.your.package;

}

【讨论】:

  • 我正要降级到更早的 gradle 版本,谢谢,成功了!
【解决方案2】:

现在有一个 JavaFX Gradle 插件的分支,它删除了模块化插件。 该插件的开发者建议仅在您使用 Java 16 和/或 Gradle 7 时使用它。

构建脚本:

plugins {
    id 'application'
    id 'com.dua3.javafxgradle7plugin' version '0.0.9'
}

application {
    mainModule = 'module.name'
    mainClass = 'class.name'
}

javafx {
    version = '16'
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

您的模块描述符不需要更改。


插件信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多