mal*_*din 5 java command-line compilation gradle kotlin
我有混合Java和Kotlin中,我想从运行演示项目的代码command line。仅对于 java,我可以运行该程序,java -jar foo.jar但是当我使用Kotlin代码中的任何类时,它会生成java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
我尝试了不同的解决方案并检查了jar文件。它包含这两个类,但我想kotlin-runtimejar 中缺少它。
这是build.gradle文件
plugins {
id 'java-library'
id 'org.jetbrains.kotlin.jvm'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin/'
test.java.srcDirs += 'src/test/kotlin/'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
testImplementation 'junit:junit:4.12'
}
jar {
manifest {
attributes 'Main-Class': 'com.mallaudin.App'
}
from {
configurations.compile.collect {
it.isDirectory()? it: zipTree(it)
}
}
}
Run Code Online (Sandbox Code Playgroud)
生成jar文件的内容
.
??? com
? ??? mallaudin
? ??? App.class
? ??? User.class
??? META-INF
??? basics.kotlin_module
??? MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)
内容 MANIFEST.MF
Manifest-Version: 1.0
Main-Class: com.mallaudin.App
Run Code Online (Sandbox Code Playgroud)
运行jar表单命令行时出现异常
allaudin@geek ~/Desktop/KotlinLab (master) $ java -jar basics/build/libs/basics.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at com.mallaudin.User.<init>(User.kt)
at com.mallaudin.App.main(App.java:5)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 2 more
Run Code Online (Sandbox Code Playgroud)
所以,我找到了解决方案。在build.gradle文件中,我已将implementation配置替换为compile,现在它可以工作了。我相信它也应该适用,implementation但事实并非如此。现在jar看起来像这样
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 com\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kotlin\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 META-INF\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 org\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4958 次 |
| 最近记录: |