微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 无法使用Gradle和Kotlin运行生成的JAR文件

我有一个使用Gradle和Kotlin配置的项目.这是一个命令行实用程序,我希望能够从我的终端运行生成的jar.但是我收到以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
    at com.autentia.impt.MainKt.main(Main.kt)
Caused by: java.lang.classNotFoundException: kotlin.jvm.internal.Intrinsics
    at java.net.urlclassloader.findClass(urlclassloader.java:381)
    at java.lang.classLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.classLoader.loadClass(ClassLoader.java:357)
    ... 1 more

我的gradle配置如下:

buildscript {
    ext.kotlin_version = '1.2.20'
    ext.junit_platform_version = '1.0.1'
    ext.junit_version = '5.0.0'
    ext.moshi_version = '1.5.0'
    ext.jna_version = '4.5.0'

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.junit.platform:junit-platform-gradle-plugin:$junit_platform_version"
    }
}

version '1.0-SNAPSHOT'

apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'org.junit.platform.gradle.plugin'

mainClassName = 'com.autentia.impt.MainKt'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "org.jetbrains.kotlin:kotlin-reflect"
    implementation "com.squareup.moshi:moshi:$moshi_version"
    implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"
    implementation "net.java.dev.jna:jna:$jna_version"
    testImplementation("org.junit.jupiter:junit-jupiter-api:$junit_version")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:$junit_version")
}

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
}

task wrapper(type: Wrapper) {
    gradLeversion = '4.4.1'
}

jar {
    manifest {
        attributes "Main-Class": mainClassName
    }

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

compileKotlin {
    kotlinoptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinoptions.jvmTarget = "1.8"
}

我用来生成jar的命令是./gradlew clean build,我用来运行jar的命令是java -jar build / libs / impt-1.0-SNAPSHOT.jar.

我已经尝试过关注official docs了,我也试过这些资源:1,23没有任何运气.

解决方法:

只需更改实现配置即可编译. (至少对于kotlin-stdlib)

不推荐使用编译配置,应该用Android的Gradle插件中的implementation或api替换,但是对于kotlin-gradle-plugin,我认为你仍然需要编译.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐