【问题标题】:Javafx 10 or older for download to create a runnable jar file下载 Javafx 10 或更早版本以创建可运行的 jar 文件
【发布时间】:2020-07-08 14:36:18
【问题描述】:

我正在寻找 javafx 10 或更新版本。我目前有 javafx-sdk-11 并试图使我的程序成为一个可运行的 jar 文件,但显然自 javafx 11 以来,该选项不再可用。

所以我必须去终端并输入以下行来运行它:

java --module-path /path/to/javafx/javafx-sdk-11.0.2 or another/lib --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web -jar /path/to/GUI_Music_Gen.jar

由于我找不到可供下载的较旧版本的 javafx,因此我请求您的帮助。如果有人可以帮助我,请告诉我。提前致谢。 顺便说一句,我不知道这是否会成为兼容性问题,但我运行的是 macOS X。

【问题讨论】:

标签: java macos javafx


【解决方案1】:

我建议使用grade 或maven 之类的依赖管理来运行JavaFX 并构建一个工作Jar。

我可以为您提供这个 build.gradle 用于一个有效的 JavaFX 项目:


buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.7.0'
        classpath 'org.openjfx:javafx:11'

    }
    repositories {
        mavenLocal()
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }

    }
}

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

sourceCompatibility = 11
targetCompatibility = 11
repositories {
    jcenter()
    mavenCentral()
}

// configure here

mainClassName = "your.app.main"

publishing {
    publications {
        mavenAar(MavenPublication) {
            from components.java
            afterEvaluate {
                artifact javadocJar
                artifact sourcesJar
            }
        }
    }
}

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


sourceSets {
    main.java.srcDir "src/main/java"
    main.resources.srcDir "src/main/resources"
}


dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'
    implementation 'com.google.guava:guava:27.0.1-jre'
    testImplementation 'junit:junit:4.12'
    // use java fx just like a regular dependency :) 
    implementation 'org.openjfx:javafx:11'
    compile group: 'org.openjfx', name: 'javafx', version: '11.0.2'
}

// important Configure your project 
jar {
    manifest {
        attributes(
                'Main-Class': 'your.app.main'
        )

    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

compileJava {
    doFirst {
        options.compilerArgs = [
                '--module-path', classpath.asPath,
                '--add-modules', 'javafx.controls,javafx.fxml,javafx.graphics'
        ]
        println options.compilerArgs
    }
}

只需将“your.project.main”替换为您的实际主类,一切都会正常运行。

同样重要的是,您的 Main 类不从 Application 扩展。 它应该只启动应用程序。

【讨论】:

  • 感谢您的回复。我尝试在 IntelliJ 上使用 Gradel,但偶然发现了一个错误,与 Java 运行时和类文件版本有关。我试图寻找解决方案,但找不到。所以我想我会尝试通过终端运行它。你能帮我看看文件结构吗?另外我不知道这是否相关,但我的项目依赖于其他库,我想我需要在 build.gradle 文件中指定它?
  • @Maxlanglet 是的,您应该在依赖项部分添加它,文件结构也应该像常规 Java 项目一样。您正在使用哪个 Java 版本?你使用像 maven 这样的依赖管理吗?如果不只是将“buil.gradle”文件添加到项目的根目录,并删除 *.iml 文件,它将由 IntelliJ 创建。然后您应该打开 intelliJ 右侧的 gradle 菜单,然后右键单击您的项目并选择“刷新 gradle 依赖项”。你如何导入其他库?
  • 我正在使用 SDK 13,我尝试像使用 Gradel 一样转换为 Maven,但我得到的错误越来越多。我尝试了您的建议,但没有运气,无法构建项目,只会弹出错误。我导入的另一个库是 jMusic,我下载了 jar 文件并通过 Project Structure -> Librairies 添加了这个库
猜你喜欢
  • 1970-01-01
  • 2015-06-04
  • 2019-10-16
  • 1970-01-01
  • 2021-04-24
  • 2012-11-26
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多