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

标签 java gradle javafx launch4j

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

我尝试使用 Gradle-launch4j 提供的快速入门,但 exe 没有启动,它确实在 IDE 中启动,当我从命令行运行时
我收到错误 JavaFX modules are needed to run the application
这是我的 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'
}

这是我的 module-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 应用程序,它不能是控制台类型。应该是 我在下面更新的类型。您必须提供 主类名 (具有 main 方法的类名)具有完整的包名。运行后,您将能够看到 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'
}

关于java - 如何使用 gradle-launch4j 插件将 gradle 项目编译为 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222506/

相关文章:

java - 使用 Swing 所见即所得编辑器动态调整按钮网格的大小?

gradle - 如何在Gradle中串联多个文件?

javafx - JavaFX 图表中的缩放选择矩形未显示,但缩放工作正常

Javafx 任务 - 更新方法的进度

Java 9 gradle 找不到 javafx 模块

java - Android View 从 .xml 到 .java - 依赖项

java - Jruby新手: Installing gems

java - Eclipse,gradle 依赖项(持久化)缺少库

java - JVM Tenured/Old gen 达到限制和服务器挂起

java - 我无法应用 gradle 6.x 插件