使用Kotlin和Gradle编译vs实现创建胖jar?
我正在Kotlin&Gradle中修补一个简单的“hello world”项目(见下文)。我添加了“fat jar”集合来引入Kotlin依赖项,但是当我尝试运行使用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错误,因为依赖项在运行时不可用 通过将实现更改为编译,我已经解决了这个问题,这使得一切工作正常。但据我所知,我们不应该再
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")
}