Ошибка неподдерживаемой версии major.minor при упаковке приложения tornadofx

Я занимаюсь разработкой приложения Tornadofx уже пару месяцев. Он отлично работает в среде IDE (intellij ultimate, win 10), но теперь, когда мне нужно создать фактическую исполняемую банку для запуска другими людьми, я не могу заставить ее работать.

Я использую плагин openfx gradle для автоматического сбора зависимостей javafx и предоставления задачи приложения / запуска, которую я использовал во время разработки. В документации есть также включение org.beryx.jlink в качестве плагина для этого финального процесса упаковки. Это приложение tornadofx, я все написал на Kotlin. Проблема, с которой я столкнулся сейчас, заключается в том, что когда я запускаю задачи jlink, jlinkZip или jpackage (которые, как я предполагаю, предоставят мне распространяемую сборку), я получаю сообщение об ошибке «Unsupported major.minor version 56.0».

Я покопался, подумал: «Может быть, мне нужно обновить свой jdk с 12 до 14», поэтому я установил openjdk14 и теперь выдает ошибку «Неподдерживаемая версия major.minor 58.0». Итак, очевидно, проблема в том, что мой jdk слишком обновлен ...? Я не уверен. Однако я не знаю, какая версия jdk мне нужна для сборки. Я просто не уверен, что мне делать дальше. Некоторые другие исследования, которые я провел, показали, что jlink не работает с kotlin, но что плагин gradle 'org.beryx.jlink' является "Badass jlink" и может работать с Kotlin.

В качестве дополнительной информации у меня есть несколько подмодулей и отдельно построенная внутренняя основная библиотека, поэтому есть много частей, которые нужно собрать и собрать. Однако каждый подмодуль build.gradle выглядит примерно так:

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 выглядит так:

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, выглядит так:

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:

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 без проблем.


person b_camphart    schedule 30.03.2020    source источник


Ответы (2)


Gradle 6.3 - это последняя версия (на момент этого комментария), а также первая версия, поддерживающая Java 14. Просто обновите свою оболочку Gradle:

./gradlew wrapper --gradle-version=6.3

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

person Francisco Mateo    schedule 30.03.2020
comment
Это определенно продвинуло меня дальше, но задача createMergedModule не может найти ни один из модулей javafx. Он генерирует объединенный файл модуля module-info.java, и я определенно включил все необходимые модули javafx в блок задачи javafx gradle, но он по-прежнему не может их найти. Я что-то упускаю? Я могу вставить новые ошибки, если это будет полезно. - person b_camphart; 31.03.2020
comment
Это не связано с исходным вопросом. Так что откройте новый вопрос со всей необходимой информацией. - person Francisco Mateo; 31.03.2020

Я заметил, что плагин org.beryx.jlink работает только с Java 11, а с Java 14 я получил эту ошибку:

Execution failed for task ':createMergedModule'.
> Unsupported major.minor version 58.0

И чтобы заставить его работать, я запустил java 11 jlink. В моем build.gradle (gradle-6.3) я использовал это:

jlink {    
   javaHome = '/usr/lib/jvm/jdk-11.0.6+10'
   ......
}

и указал это для jpackage, чтобы получить версию java 14:

jpackage {
     jpackageHome = '/usr/lib/jvm/jdk-14+36'
     ......
}

Также использовал эту версию:

plugins {
    id "org.beryx.jlink" version "2.17.4"
}

Надеюсь это поможет.

person David Miller    schedule 07.04.2020
comment
Есть ли открытый вопрос по этому поводу в их репо? - person user158; 12.02.2021
comment
Поскольку мой прошлогодний пост выглядит так, будто org.beryx.jlink работает на jdk15 - см. github .com / beryx / badass-jlink-plugin / issues / 153 Версии плагинов сильно изменились. - person David Miller; 12.02.2021
comment
Нет, когда я вчера пробовал, он не работал с JDK 15. Unsupported major.minor version 59.0. - person user158; 12.02.2021