javafxgluon-mobile

Task 'run' causes: org.joor.ReflectException: java.lang.NoSuchFieldException: javaExecHandleBuilder - Gluon Mobile Project


When I try to run my entire project in NetBeans I get the following error log:

...
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

I don't know what's going on, I specified the main class in build.gradle... Pls, help!


Solution

  • I found a solution to develop JavaFX project with Gradle version 6.6 or newer. You need to remove the javafx-gradle-plugin and use the JPMS support from Gradle itself. With removing the javafx-gradle-plugin, you need to maintain the JavaFX dependencies by yourself. Here an example of the build.gradle setup.

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

    On your module-info.java file you need to declare the require JavaFX module.

    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;
    
    }