Как скомпилировать gradle-проект для exe с помощью плагина gradle-launch4j - PullRequest
0 голосов
/ 20 мая 2019

Я создал приложение JavaFX с Gradle и хотел бы экспортировать его в exe вместе со всеми его зависимостями, а также с JRE, как лучше всего это сделать?

Я попытался использовать быстрый запуск, предоставляемый Gradle-launch4j, но исполняемый файл не запускается, он запускается в 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'
}

И вот мой модуль-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, и я действительно не понимаю, почему это проблема. Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 20 мая 2019

Обновите ваш build.gradle со следующими изменениями. Поскольку это приложение JavaFx, оно не может быть консольного типа. Это должен быть тип gui , который я обновил ниже. Вы должны предоставить имя основного класса (имя класса с методом main) с полным именем пакета. После запуска вы сможете увидеть исполняемый файл и запустить его.

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'
}
...