为了开始,我编写了一个简单的Kotlin源文件和一个Gradle脚本文件。但我不知道如何将主函数添加到清单中,这样JAR就可以自我执行。
下面是我的build.gradle脚本:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.9.66'
}
}
apply plugin: "kotlin"
repositories {
mavenCentral()
}
dependencies {
compile 'org.jetbrains.kotlin:kotlin-stdlib:0.9.66'
}
jar {
manifest {
attributes 'Main-Class': 'com.loloof64.kotlin.exps.ExpsPackage'
}
}这是我的com.loloof64.kotlin.exps.Multideclarations.kt
package com.loloof64.kotlin.exps
class Person(val firstName: String, val lastName: String) {
fun component1(): String {
return firstName
}
fun component2(): String {
return lastName
}
}
fun main(args: Array < String > ) {
val(first, last) = Person("Laurent", "Bernabé")
println("First name : $first - Last name : $last")
}当我从终端(java -jar MYJar.jar)启动JAR时,我得到了下面的堆栈跟踪,说明Kotlin反射库类丢失了,实际上它们还没有添加到JAR中。似乎我错过了最终JAR中的kotlin编译器工件类,以及kotlin-stdlib源代码,但我不知道如何调整Gradle构建。
$> java -jar build/libs/kotlin_exps.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/reflect/jvm/internal/InternalPackage
at com.loloof64.kotlin.exps.ExpsPackage.<clinit>(MultiDeclarations.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.reflect.jvm.internal.InternalPackage
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more我使用的是Kotlin 0.9.66和Gradle 2.1。
发布于 2019-04-22 07:32:52
上述解决方案中没有一个对我有效,因为我正在建造人工制品。
IntelliJ IDEA 2019.1.1. IDE版本
若要修复此问题,请执行以下操作
步骤
步骤1-创建伪影
+ -> JAR -> From modules with dependencies

Main Class

步骤2-更改清单路径
Directory for META-INF/MANIFEST.MF的值更改为项目根目录。
例如,从/your/project/directory/src/main/kotlin到/your/project/directory

OK,然后按Apply和OK。步骤3-构建伪影
Build -> Build Artifacts -> [your-artifact-name] -> Build__。生成的JAR文件可以在out/artifact/[your-artifact-name]目录中找到。(y)
https://stackoverflow.com/questions/26469365
复制相似问题