Мой вывод .jar дает java.lang.NoClassDefFoundError: kotlin / jvm / internal / Intrinsics - PullRequest
0 голосов
/ 06 июля 2019

Проект можно запустить с помощью команды «Выполнить» -> «Выполнить» [PACKAGE.NAME] .MainKt \ '' в Intellij Idea IDE.

Тем не менее, я попробовал несколько методов из переполнения стекапроблема по-прежнему существует, так как я создал файл jar, и при запуске выходного файла jar jar -jar [JarFilePathInMyComputer].JarFile.jar выдается исключение, как показано ниже

 Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
        at [PACKAGENAME].MainKt.main(Main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 1 more

Мои зависимости

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation 'org.jetbrains.kotlin:kotlin-runtime:1.2.71'
    implementation "com.google.code.gson:gson:2.8.5"
    implementation 'org.apache.httpcomponents:httpclient:4.5.9'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Когда я добавляю артефакты, компоновка OutPut содержит ниже библиотеки kotlin

Gradle: commons-code:commons-codec:1.11
Gradle: org.jetbrains.kotlin-stdlib-jdk8-1.3.21
Gradle: org.jetbrains.annaotations:13.0
Gradle: juniy.junit:4.12
Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.21
Gradle: org.jetbrains.kotlin-runtime:1.2.71
Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21
Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.21

Мой MANIFEST.MF us

Manifest-Version: 1.0
Main-Class: [PACKAGE.NAME].MainKt
Class-Path: [PACKAGE.NAME]

Как это исправить?Я пробовал несколько методов, но все равно выдает то же исключение.

1 Ответ

0 голосов
/ 07 июля 2019

Вам нужно либо добавить среду выполнения kotlin в ваш classpath при вызове java, либо вам нужно создать толстый файл jar, который упаковывает среду выполнения в ваш файл jar.Лично мне больше всего нравится вариант с толстым флягой, использующий плагин shadow .

plugins {
    ...
    id "com.github.johnrengelman.shadow"
}

, или вы можете использовать плагин application, который создает развертываемый пакет с запуском Windows и Unixсценарии, которые управляют classpath.

plugins {
    ...
    id "application"
}

Есть несколько других подходов к созданию толстой фляги, приведенной в ответах на этот вопрос (как предложил Андреас) и kotlinВ репозитории примеров есть несколько проектов, использующих плагин application.

...