使用Kotlin和Gradle编译vs实现创建胖jar?

使用Kotlin和Gradle编译vs实现创建胖jar?,gradle,kotlin,Gradle,Kotlin,我正在Kotlin&Gradle中修补一个简单的“hello world”项目(见下文)。我添加了“fat jar”集合来引入Kotlin依赖项,但是当我尝试运行java-jar build/libs/hello-1.0-SNAPSHOT.jar时,我得到了java.lang.NoClassDefFoundError:Kotlin/jvm/internal/Intrinsics错误,因为依赖项在运行时不可用 通过将实现更改为编译,我已经解决了这个问题,这使得一切工作正常。但据我所知,我们不应该再

我正在Kotlin&Gradle中修补一个简单的“hello world”项目(见下文)。我添加了“fat jar”集合来引入Kotlin依赖项,但是当我尝试运行
java-jar build/libs/hello-1.0-SNAPSHOT.jar
时,我得到了
java.lang.NoClassDefFoundError:Kotlin/jvm/internal/Intrinsics
错误,因为依赖项在运行时不可用

通过将
实现
更改为
编译
,我已经解决了这个问题,这使得一切工作正常。但据我所知,我们不应该再使用
compile
,而且
api
implementation
都不能使“胖罐子”收集过程正常工作,当我查看
依赖项的其他选项时,我不确定使用哪一个

问题:在这种情况下,“正确”的做法是什么

// build.gradle
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.41'
}

group 'com.example.test'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // if I change "implementation" to "compile", running the jar works
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}

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

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}
//Application.kt
趣味主线(args:Array){
println(“你好,世界”)
}

不推荐使用
编译
依赖项。您应该使用
implementation
声明您的实现依赖项,并使用
compileClasspath
获取所有编译依赖项。

保留
implementation
,但切换到
configurations.compileClasspath.collect
谢谢@JBNizet!请您将此作为答复提交给我,以便我可以接受?
// Application.kt
fun main(args: Array<String>) {
    println("hello world")
}