gradle 我正在努力使JavaFX项目到可执行文件失败,而不是压缩文件,我得到Zip存档文件

mbjcgjjk  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(77)

我正在使用Gradle在JavaFX上创建项目(我使用IntelliJ IDEA).该项目已经准备好,运行或多或少像我想它.现在,当我试图使它成为一个可执行的更方便的使用我发现指示说,我首先需要一个可执行的压缩文件.使压缩文件我得到Zip存档文件代替.在IntelliJ中,它显示我有压缩文件,但如果我在资源管理器中打开它,它只有ZIP文件,如果我尝试在cmd上运行我的. jar文件,它会说没有.jar文件。Created JAR in IntelliJZIP arcihive file in explorer
聊天GPD建议,有一个问题,在构建.Gradle文件,但如果我改变了它,因为它告诉我什么都没有改变。

zpqajqem

zpqajqem1#

请先检查:

  • 您创建的文件的扩展名为.jar
  • 您的操作系统使用JRE打开.jar文件,而不是使用zip应用程序。
    模块化应用解决方案:

如果你有一个模块化的应用程序,你必须使用jpackage或jlink创建一个本机包(exe,msi,.)。没有它你不会高兴。如果你使用IntelliJ创建JavaFX应用程序,已经定义了一个Gradle任务来完成这个任务。

非模块化应用解决方案:

首先,你的主类不能从另一个类扩展,这是行不通的。
其次,您必须创建一个包含所有需要的依赖项的胖对象。
下面是一个工作build.gradle文件的例子,其中包含一个可以完美构建可执行文件的任务:

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.14'
}

group 'com.wedasoft'
version '1.0.0'

repositories {
    mavenLocal()
    mavenCentral()
}

ext {
    javaFxVersion = '17.0.8'
    junitVersion = '5.10.0'
    assertJVersion = '3.24.2'
    mainClassNameParam = 'your.groupId.javafxappnonmodular.MainApplicationLauncher'
}

//noinspection GroovyUnusedAssignment
mainClassName = "${mainClassNameParam}"
//noinspection GroovyUnusedAssignment
sourceCompatibility = '17'
//noinspection GroovyUnusedAssignment
targetCompatibility = '17'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

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

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
    testImplementation("org.assertj:assertj-core:${assertJVersion}")
}

test {
    useJUnitPlatform()
}

task createCustomFatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': "${mainClassNameParam}"
    }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

字符串
如果你不能让它工作,你可以从我的GitHub下载一个预配置和完整的工作模板项目,并根据你的需要编辑它:
https://github.com/davidweber411/javafx-JavaFxAppGradleNonModular
如果对你有帮助,我会很感激一颗星星!

其他信息:

请注意,您需要安装相应的JDK。

相关问题