首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打包tornadofx应用程序时出现不支持的major.minor版本错误

打包tornadofx应用程序时出现不支持的major.minor版本错误
EN

Stack Overflow用户
提问于 2020-03-31 07:07:35
回答 2查看 376关注 0票数 0

我已经开发Tornadofx应用程序好几个月了。它在IDE (intellij旗舰版,win 10)中运行得很好,但现在我需要创建一个实际的可执行jar,以便其他人运行它,我似乎无法让它工作。

我正在使用openfx gradle插件自动收集javafx依赖项并提供应用程序/运行任务,这是我在开发过程中一直在使用的。那里的文档还包含org.beryx.jlink作为最终打包过程的插件。这是一个tornadofx应用程序,我已经用Kotlin编写了整个程序。我现在遇到的问题是,当我运行jlink、jlinkZip或jpackage任务(我假设它们将为我提供一个可分发的构建)时,我收到错误消息"Unsupported major.minor version56.0“。

我做了一些调查,认为“也许我需要将我的jdk从12更新到14”,所以我安装了openjdk14,现在的错误是"Unsupported major.minor version58.0“。那么,很明显,问题是我的jdk更新太快了……?我没有把握。然而,我不知道我需要什么版本的jdk来构建它。我只是不知道接下来该怎么做。我做过的其他一些研究表明,jlink不能与kotlin一起工作,但'org.beryx.jlink‘gradle插件是"Badass jlink“,可以与Kotlin一起工作。

对于更多的背景,我有多个子模块和一个单独构建的内部核心库,所以有很多东西需要构建和组合在一起。但是,每个子模块build.gradle看起来如下所示:

代码语言:javascript
复制
apply from: "$rootDir/kotlin-module.gradle"
apply from: "$rootDir/local-repositories.gradle" // helps resolve the local version of the core module.

dependencies {
    implementation "<--anonymized core module-->"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"
    testImplementation 'io.cucumber:cucumber-java8:5.5.0'
    testImplementation 'io.cucumber:cucumber-junit:5.5.0'

    implementation project(":application")
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.61"
}

configurations {
    cucumberRuntime {
        extendsFrom testImplementation
    }
}

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--add-plugin', 'html:build/cucumber/html-report', '--glue', '<-- root package name -->', 'src/test/resources/features', '--strict']
        }
    }
}

而kotlin-module.gradle文件看起来像这样:

代码语言:javascript
复制
apply plugin: 'kotlin'

group '<-- anonymized group name -->'
version '0.1.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0'
    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}

compileKotlin {
    kotlinOptions.jvmTarget = "13" // version issue here?
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "13" // version issue here?
}

test {
    useJUnitPlatform()
}

包含javafx和tornadofx的实际子模块如下所示:

代码语言:javascript
复制
plugins {
    id 'java'
    id 'application'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.openjfx.javafxplugin' version '0.0.8'
    id 'org.beryx.jlink' version '2.12.0'
    id 'edu.sc.seis.launch4j' version '2.4.6'
    id 'no.tornado.fxlauncher' version '1.0.20'
}

apply from: "$rootDir/kotlin-module.gradle"
apply from: "$rootDir/local-repositories.gradle"

repositories {
    jcenter()
}

dependencies {
    implementation "<--anonymized core module-->"

    implementation project(":application")
    implementation project(":data")
    implementation project(":gui")
    implementation "no.tornado:tornadofx:1.7.19"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.3.3"
    testImplementation 'io.cucumber:cucumber-java8:5.5.0'
    testImplementation 'io.cucumber:cucumber-junit:5.5.0'

    implementation "de.jensd:fontawesomefx-commons:11.0"
    implementation "de.jensd:fontawesomefx-controls:11.0"
    implementation "de.jensd:fontawesomefx-fontawesome:4.7.0-11"
    implementation "de.jensd:fontawesomefx-materialicons:2.2.0-11"
    implementation "de.jensd:fontawesomefx-emojione:2.2.7-11"
}

javafx {
    version = "14"
    modules = [ 'javafx.controls', 'javafx.fxml'/*, 'javafx.web', 'javafx.swing'*/ ]
}

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = '<-- name of root module -->'
    }
}

mainClassName = '<-- package.path.to.kotlin.class.extending.tornadofx.Application -->'

launch4j {
    mainClassName = '<-- package.path.to.kotlin.class.extending.tornadofx.Application -->'
}

configurations {
    cucumberRuntime {
        extendsFrom testImplementation
    }
}

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['--plugin', 'pretty', '--glue', '<-- root package name -->', 'src/test/resources/features', '--strict']
        }
    }
}

最后,父build.gradle文件:

代码语言:javascript
复制
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.70'
}

group '<-- anonymized group name -->'
version '0.1.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0'
    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}

compileKotlin {
    kotlinOptions.jvmTarget = "13" // version issue here?
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "13" // version issue here?
}

test {
    useJUnitPlatform()
}

我真的希望有人能洞察到我还能做些什么来构建它。这真的让我感到困惑,因为我一直在构建它,并在IDE中运行它,整个过程中都没有问题。

EN

回答 2

Stack Overflow用户

发布于 2020-03-31 07:31:34

Gradle 6.3是最新的版本(截至本文),也是第一个支持Java 14的版本。只需升级您的Gradle包装器:

代码语言:javascript
复制
./gradlew wrapper --gradle-version=6.3

https://docs.gradle.org/6.3/release-notes.html

票数 2
EN

Stack Overflow用户

发布于 2020-04-07 19:58:43

我注意到org.beryx.jlink插件只适用于Java11,而对于Java14,我得到了这个错误:

代码语言:javascript
复制
Execution failed for task ':createMergedModule'.
> Unsupported major.minor version 58.0

因此,为了让它工作,我运行了java 11 jlink。在我的build.gradle (gradle-6.3)中,我使用了以下内容:

代码语言:javascript
复制
jlink {    
   javaHome = '/usr/lib/jvm/jdk-11.0.6+10'
   ......
}

并为jpackage指定了以下内容以获取java 14版本:

代码语言:javascript
复制
jpackage {
     jpackageHome = '/usr/lib/jvm/jdk-14+36'
     ......
}

还使用了此版本:

代码语言:javascript
复制
plugins {
    id "org.beryx.jlink" version "2.17.4"
}

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60940973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档