如何修复jvm选项导出javafx 11到com.jfoenix的gradle理念?

 2023-02-16    374  

问题描述

我在互联网上查看已经3天了如何在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

在简单的想法项目上,我正在添加

如何修复jvm选项导出javafx 11到com.jfoenix的gradle理念?

--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选项,但是如何?

我正在使用gradle javafx 11.0.2,java 11,在Intellij Idea上,

这是build.gradle

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'

谢谢

推荐答案

如果您正在运行一个非模块化项目(您没有module-info.java),以在运行任务中包括VM参数,则需要添加到build.gradle文件中. p>

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"
  ]
}

请注意,在这种情况下,您不能使用–add-exports=…=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)的新版本(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')
}

其他推荐答案

  • 编译时间以下:
compileJava {
    options.compilerArgs.add('--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix')
    options.compilerArgs.add('--add-exports=javafx.controls/com.sun.javafx.scene.control=com.jfoenix')
    options.compilerArgs.add('--add-exports=--add-exports=javafx.base/com.sun.javafx.binding=com.jfoenix')
    options.compilerArgs.add('--add-exports=javafx.graphics/com.sun.javafx.stage=com.jfoenix')
}
  • 遵循运行时
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"
    ]

}

我们必须设置两个.如果我们只设置第一个想法可以编译,但是在运行时间投掷异常.谢谢@sakra @joséPereda

以上所述是小编给大家介绍的如何修复jvm选项导出javafx 11到com.jfoenix的gradle理念?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34032.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。