Kotlin, Gradle - невозможно запустить файл NoClassDefFoundError - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь собрать и запустить своими руками, но у меня проблема. Я использую Intellij IDEA, Kotlin и Gradle. Сначала я собрал проект (и создал файл .class), затем в IDE Terminal я набрал «gradle build» (это делает меня .jar файлом). Когда я пытаюсь запустить этот файл .jar, я получаю эту ошибку:

java -jar appname.jar
Exception in thread "main" java.lang.NoClassDefFoundError: sun/jvm/hotspot/HotSpotAgent
        at com.neel.helloworld.MainKt.main(main.kt:12)
        at com.neel.helloworld.MainKt.main(main.kt)
Caused by: java.lang.ClassNotFoundException: sun.jvm.hotspot.HotSpotAgent
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
        ... 2 more

Я использую AdoptOpenJDK8, PATH - пользовательскую и системную переменную с java \ bin, JAVA_HOME для home java dir.

Мой build.gradle.kts: (некоторые «опции» могут выглядеть, но я просто пробую все)

plugins {
    kotlin("jvm") version "1.3.71"
}

group = "org.dumper"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation(files("${System.getenv("JAVA_HOME")}\\lib\\sa-jdi.jar"))
    implementation(files("${System.getenv("JAVA_HOME")}\\lib\\tools.jar"))

    compile(kotlin("stdlib-jdk8"))
    compile(files("${System.getenv("JAVA_HOME")}\\lib\\sa-jdi.jar"))
    compile(files("${System.getenv("JAVA_HOME")}\\lib\\tools.jar"))

}

tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
}

val jar by tasks.getting(Jar::class) {
    manifest {
        attributes["Main-Class"] = "com.neel.helloworld.MainKt"
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

Учитывая, что вы создаете приложение , даже если оно CLI, я бы рекомендовал изучить плагин application Gradle , который может позаботиться о создании сценариев выполнения с соответствующими путь к классу определен.

...