如何修复jvm选项将JavaFX11导出到com.jfoenix上的gradle idea?

如何修复jvm选项将JavaFX11导出到com.jfoenix上的gradle idea?,java,intellij-idea,javafx,java-11,javafx-11,Java,Intellij Idea,Javafx,Java 11,Javafx 11,三天来,我一直在网上寻找如何解决gradle的问题 Caused by: java.lang.IllegalAccessError: class com.jfoenix.skins.JFXTabPaneSkin (in module com.jfoenix) cannot access class com.sun.javafx.scene.control.behavior.TabPaneBehavior (in module javafx.controls) because module jav

三天来,我一直在网上寻找如何解决gradle的问题

Caused by: java.lang.IllegalAccessError: class com.jfoenix.skins.JFXTabPaneSkin (in module com.jfoenix) cannot access class com.sun.javafx.scene.control.behavior.TabPaneBehavior (in module javafx.controls) because module javafx.controls does not export com.sun.javafx.scene.control.behavior to module com.jfoenix
关于我添加的简单创意项目

--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix --add-exports javafx.controls/com.sun.javafx.scene.control=com.jfoenix --add-exports javafx.base/com.sun.javafx.binding=com.jfoenix --add-exports javafx.graphics/com.sun.javafx.stage=com.jfoenix --add-exports javafx.base/com.sun.javafx.event=com.jfoenix 
我知道,我必须添加jvm选项,但我该怎么做

我在intellij idea上使用gradle javafx 11.0.2和Java11

这是建筑,格雷德尔

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

compileJava.options.encoding = 'UTF-8'
repositories {
    mavenCentral()
}

dependencies {
    //     https://mvnrepository.com/artifact/com.jfoenix/jfoenix
    compile group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9'
    compile group: 'de.jensd', name: 'fontawesomefx-fontawesome', version: '4.7.0-9.1.2'
    // https://mvnrepository.com/artifact/de.jensd/fontawesomefx-commons
    runtime group: 'de.jensd', name: 'fontawesomefx-commons', version: '9.1.2'
// https://mvnrepository.com/artifact/com.h2database/h2
    compile group: 'com.h2database', name: 'h2', version: '1.4.199'
}

javafx {
    version = "11.0.2"
    modules = [ 'javafx.controls', 'javafx.fxml','javafx.graphics','javafx.base' ]
}

mainClassName = 'org.yanisboukir.agence.Main'

谢谢

如果您正在运行一个非模块化项目(您没有
模块信息.java
),要在运行任务中包含VM参数,您需要添加到
build.gradle
文件中的所有内容是:

run {
  jvmArgs = [
    "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED",
    "--add-exports=javafx.base/com.sun.javafx.binding=ALL-UNNAMED",
    "--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED"
  ]
}
请注意,在这种情况下,您不能使用
--addexports=…=com.jfoenix

如果运行模块化项目,则使用如下模块描述符:

module hellofx {
    
    requires javafx.controls;
    
    requires javafx.fxml;
    
    requires com.jfoenix;

    
    opens org.openjfx to javafx.fxml;
    
    exports org.openjfx;

}
现在,您必须在构建文件中包含以下VM参数:

run {

    jvmArgs = [

        "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix",

        "--add-exports=javafx.controls/com.sun.javafx.scene.control=com.jfoenix",

        "--add-exports=javafx.base/com.sun.javafx.binding=com.jfoenix",
        "--add-exports=javafx.graphics/com.sun.javafx.stage=com.jfoenix",
        "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix"
    ]

}

对于较新版本的Gradle(6.x),以下内容对我很有用:

compileJava {
    options.compilerArgs.add('--add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED')
}
对于Java测试代码:

compileTestJava {
    options.compilerArgs.add('--add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED')
}

为了完整性(或完全混淆),我们可以补充一点,在两者之间的某个地方也有自动模块。如果在模块路径上放置一个非模块化的jar,就会得到它们。然后从jar文件名或清单中指定的文件名派生模块路径。在这种情况下,您不能使用ALL-UNNAMED,但必须使用派生/指定的模块名,尽管您的项目可能不包含任何module-info.java文件。哦,运行得很好!!!非常感谢你!但是我可以用这个部署吗?我的项目是相同的:但只是像在jlink/jpackage中一样编辑了main和controllers“deploy”,是的,您还必须包括这些JVMARG。例如,见。另一方面,如果你做一个胖jar,所有东西都会转到类路径,所以你不需要它们。我仍然得到了这个错误>启动失败:构建文件'C:\Users\yanis\PROJECT\java11 javafx demo master\app\build.gradle':54:expecting'},在第54行第6列找到了'jvmArgs'。jvmArgs=[^1错误您不需要将它添加到您的
应用程序
项目的生成文件中吗?您不是说它“运行得很好”吗?