Gradle如何添加VM选项以在JavaFX11上运行和部署jfoenix?

Gradle如何添加VM选项以在JavaFX11上运行和部署jfoenix?,java,gradle,intellij-idea,java-11,javafx-11,Java,Gradle,Intellij Idea,Java 11,Javafx 11,我正在使用JavaFX11.0.2和Java11.0.3 为了发现“gradle”,我下载了这个项目,当我在main.fxml中添加jfoenix控件时,如下所示 <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layo

我正在使用JavaFX11.0.2和Java11.0.3 为了发现“gradle”,我下载了这个项目,当我在main.fxml中添加jfoenix控件时,如下所示

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.*?>
<?import com.jfoenix.controls.JFXTextField?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTabPane?>
<?import javafx.scene.control.Tab?>
<AnchorPane xmlns="http://javafx.com/javafx/8.0.121"
            xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.fthdgn.app.controller.MainController">
    <VBox alignment="CENTER" spacing="10.0" AnchorPane.bottomAnchor="10"
          AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10" fx:id="vbox">
        <TextField fx:id="inputTextField"/>
        <Button mnemonicParsing="false" onAction="#reveseButtonClicked" text="Reverse"/>
        <TextField fx:id="outputTextField"/>
        <JFXTextField fx:id="tf"/>
        <JFXButton text="AZUL" fx:id="button"/>
        <JFXTabPane>
            <Tab>
            </Tab>
        </JFXTabPane>

    </VBox>
</AnchorPane>
plugins {
    id 'java'
    id 'application'
    id 'com.zyxist.chainsaw' version '0.3.1'
    id 'org.beryx.jlink' version '2.15.1'
}
compileJava.options.encoding = 'UTF-8'

import org.gradle.internal.jvm.Jvm
import org.gradle.internal.os.OperatingSystem

group 'com.fthdgn'
version '1.0-SNAPSHOT'

sourceCompatibility = 11
targetCompatibility = 11

repositories {
    mavenCentral()
}

mainClassName = mainClass

def currentOS = OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}

jlink {
    javaHome.set(Jvm.current().getJavaHome().getAbsolutePath())

}

dependencies {
    implementation "org.openjfx:javafx-base:11:${platform}"
    implementation "org.openjfx:javafx-graphics:11:${platform}"
    implementation "org.openjfx:javafx-controls:11:${platform}"
    implementation "org.openjfx:javafx-fxml:11:${platform}"
    compile group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9'


}

run {
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.binding=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.graphics/com.sun.javafx.stage=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.event=com.jfoenix']

}


我编辑了build.gradle以添加一些jvm选项(用于模块应用程序),如下所示

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.*?>
<?import com.jfoenix.controls.JFXTextField?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTabPane?>
<?import javafx.scene.control.Tab?>
<AnchorPane xmlns="http://javafx.com/javafx/8.0.121"
            xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.fthdgn.app.controller.MainController">
    <VBox alignment="CENTER" spacing="10.0" AnchorPane.bottomAnchor="10"
          AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10" fx:id="vbox">
        <TextField fx:id="inputTextField"/>
        <Button mnemonicParsing="false" onAction="#reveseButtonClicked" text="Reverse"/>
        <TextField fx:id="outputTextField"/>
        <JFXTextField fx:id="tf"/>
        <JFXButton text="AZUL" fx:id="button"/>
        <JFXTabPane>
            <Tab>
            </Tab>
        </JFXTabPane>

    </VBox>
</AnchorPane>
plugins {
    id 'java'
    id 'application'
    id 'com.zyxist.chainsaw' version '0.3.1'
    id 'org.beryx.jlink' version '2.15.1'
}
compileJava.options.encoding = 'UTF-8'

import org.gradle.internal.jvm.Jvm
import org.gradle.internal.os.OperatingSystem

group 'com.fthdgn'
version '1.0-SNAPSHOT'

sourceCompatibility = 11
targetCompatibility = 11

repositories {
    mavenCentral()
}

mainClassName = mainClass

def currentOS = OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}

jlink {
    javaHome.set(Jvm.current().getJavaHome().getAbsolutePath())

}

dependencies {
    implementation "org.openjfx:javafx-base:11:${platform}"
    implementation "org.openjfx:javafx-graphics:11:${platform}"
    implementation "org.openjfx:javafx-controls:11:${platform}"
    implementation "org.openjfx:javafx-fxml:11:${platform}"
    compile group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9'


}

run {
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.binding=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.graphics/com.sun.javafx.stage=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.event=com.jfoenix']

}


我刚才补充说

run {
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.controls/com.sun.javafx.scene.control=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.binding=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.graphics/com.sun.javafx.stage=com.jfoenix']
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.event=com.jfoenix']

}


运行起来很有魅力,但这是为了部署而做的任何事情,我该如何设置所有任务的jvmArgs,以便在gradle中将jfoenix与JavaFX11和Java11一起使用

module com.fthdgn.app {
    requires javafx.controls;
    requires javafx.fxml;
    requires transitive com.jfoenix;
    opens com.fthdgn.app to javafx.graphics;
    opens com.fthdgn.app.controller to javafx.fxml;
}
您可以按照JavaFX11+的模块化部分使用Gradle

有一个插件使用JavaFX gradle插件来处理JavaFX依赖关系和构建和运行任务,还有一个插件来处理自定义映像运行时的部署

您所要做的就是将Jfoenix依赖项添加到该项目中,相应地修改其源代码,最后在
run
jlink
任务中包括所需的
jvmArgs
,如下所示:

plugins {
  id 'application'
  id 'org.openjfx.javafxplugin' version '0.0.8'
  id 'org.beryx.jlink' version '2.15.1'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9'
}

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

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

jlink {
    launcher {
        name = 'hellofx'
        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",
        ]
    }
}

mainClassName = "$moduleName/org.openjfx.MainApp"
现在,您可以使用以下工具运行项目:

./gradlew run
并使用以下命令创建运行时映像:

./gradlew jlink
完成构建后,可以从脚本运行它:

build/image/bin/hellofx
您可以按照JavaFX11+的模块化部分使用Gradle

有一个插件使用JavaFX gradle插件来处理JavaFX依赖关系和构建和运行任务,还有一个插件来处理自定义映像运行时的部署

您所要做的就是将Jfoenix依赖项添加到该项目中,相应地修改其源代码,最后在
run
jlink
任务中包括所需的
jvmArgs
,如下所示:

plugins {
  id 'application'
  id 'org.openjfx.javafxplugin' version '0.0.8'
  id 'org.beryx.jlink' version '2.15.1'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9'
}

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

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

jlink {
    launcher {
        name = 'hellofx'
        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",
        ]
    }
}

mainClassName = "$moduleName/org.openjfx.MainApp"
现在,您可以使用以下工具运行项目:

./gradlew run
并使用以下命令创建运行时映像:

./gradlew jlink
完成构建后,可以从脚本运行它:

build/image/bin/hellofx

您是否考虑过在项目中使用“代码>模块信息”Java java/代码>文件来支持适当的模块支持而不使用JVM选项HACKS?这是我的module-info.java module com.fthdgn.app{需要javafx.controls;需要javafx.fxml;需要可传递的com.jfoenix;打开com.fthdgn.app到javafx.graphics;打开com.fthdgn.app.controller到javafx.fxml;}您是否考虑过在项目中使用“代码>模块信息”Java java/代码>文件来支持适当的模块支持而不使用JVM选项HACKS?这是我的module-info.java module com.fthdgn.app{需要javafx.controls;需要javafx.fxml;需要可传递的com.jfoenix;打开com.fthdgn.app到javafx.graphics;打开com.fthdgn.app.controller到javafx.fxml;}