Java 如何使用gradle-launch4j插件将gradle项目编译为exe

Java 如何使用gradle-launch4j插件将gradle项目编译为exe,java,gradle,javafx,launch4j,Java,Gradle,Javafx,Launch4j,我已经用Gradle创建了一个JavaFX应用程序,并希望将其导出到exe及其所有依赖项和JRE,最好的方法是什么 我尝试过使用Gradle-launch4j提供的快速启动,但exe不会启动,而是在IDE中启动,当我从命令行运行时 我发现运行应用程序需要JavaFX模块 这是我的build.gradle脚本 plugins { id 'java' id 'application' id 'org.openjfx.javafxplugin' version '0.0.5'

我已经用Gradle创建了一个JavaFX应用程序,并希望将其导出到exe及其所有依赖项和JRE,最好的方法是什么

我尝试过使用Gradle-launch4j提供的快速启动,但exe不会启动,而是在IDE中启动,当我从命令行运行时
我发现运行应用程序需要JavaFX模块

这是我的build.gradle脚本

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.5'
    id 'edu.sc.seis.launch4j' version '2.4.6'
}

group 'Starter Apps'
version '1.0-SNAPSHOT'

sourceCompatibility = 11
mainClassName = "$moduleName/controllers.Main"

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile (group: 'com.jfoenix', name: 'jfoenix', version: '9.0.8'){
        exclude group: 'org.openjfx'
    }
    compile ('de.jensd:fontawesomefx-controls:11.0'){
        exclude group: 'org.openjfx'
    }
    compile ('de.jensd:fontawesomefx:8.9'){
        exclude group: 'org.openjfx'
    }
    compile ('de.jensd:fontawesomefx-icons525:4.6.3'){
        exclude group: 'org.openjfx'
    }
    compile (group: 'com.sun.mail', name: 'javax.mail', version: '1.6.2'){
        exclude group: 'org.openjfx'
    }
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class': "controllers.Main"
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}


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

launch4j {
    headerType='console'
    outfile = "Burj2.exe"
    icon = "${projectDir}/src/main/resources/images/icon.ico"
    jar = '../libs/Master_Mode_System_Config-all-1.0-SNAPSHOT.jar'
}
这是我的模块-info.java

module Master_Mode_System_Config {
    requires javafx.controls;
    requires javafx.fxml;
    requires java.mail;
    requires com.jfoenix;

    opens controllers to javafx.fxml;
    exports controllers;
}
应用程序在IDE上运行良好,我真的很困惑为什么这是一个问题。
非常感谢您的帮助。

使用以下更改更新build.gradle。因为它是JavaFx应用程序,所以不能是控制台类型。它应该是gui类型,我在下面更新了它。您必须为主类名提供完整的包名。运行后,您将能够看到exe文件并可以启动它

launch4j {
    headerType="gui"
    mainClassName = <provide your main class name>
    outfile = "Burj2.exe"
    icon = "${projectDir}/src/main/resources/images/icon.ico"
    jar = '../libs/Master_Mode_System_Config-all-1.0-SNAPSHOT.jar'
}
launch4j{
headerType=“gui”
mainClassName=
outfile=“Burj2.exe”
icon=“${projectDir}/src/main/resources/images/icon.ico”
jar='../libs/Master_Mode_System_Config-all-1.0-SNAPSHOT.jar'
}

我如何解决错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件

  • 创建一个新类(例如,
    Main
    ),该类不使用Main方法扩展
    应用程序

  • main.main
    调用
    App.main
    (App扩展应用程序)方法

  • 现在运行应用程序调用
    Main.Main

  • 公共类应用程序扩展应用程序{
    [...]
    公共静态void main(字符串[]args){
    发射(args);
    }
    [...]
    }
    公共班机{
    公共静态void main(字符串[]args){
    App.main(args);
    }
    }
    
    您得到的错误/异常是什么?
    JavaFX模块需要从powershell运行应用程序
    将cmd或powershell捆绑为gui后,cmd或powershell没有任何错误,但程序仍然无法运行。切换回控制台并获得
    错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件