与Gradle一起使用Kotlin

我是KotlinGradle新手,并试图按照这些步骤,所以我得到了以下两个文件:

运行gradle init我将build.gradle改为:

 // set up the kotlin-gradle plugin buildscript { ext.kotlin_version = '1.1.2-2' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } // apply the kotlin-gradle plugin apply plugin: "kotlin" apply plugin: 'application' mainClassName = "hello.main" // add kotlin-stdlib dependencies. repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } 

Hello.kt

 package hello fun main(args: Array) { println("Hello World!") } 

然后我运行gradle build并获得build\classes\main\hello\HelloKt.class

我的问题是:为什么生成的文件是.class不是.jar和如何获得.jar文件以及如何运行它,我试图运行生成的文件使用kotlin -classpath HelloKt.class main但得到了错误的error: could not find or load main class hello.main

这些类是Kotlin编译器的直接输出,之后它们应该被Gradle打包成一个JAR。 要构建JAR,您可以像在Java项目中一样运行jar任务:

 gradle jar 

由于任务依赖关系,这个任务通常gradle build期间运行。

这将把Kotlin类打包到一个JAR归档文件中(如果你有一个多语言项目,还有其他JVM类),通常位于build/libs/ yourProjectName .jar

至于运行JAR,请参阅本问答解答:( 链接)

感谢@hotkey的回答,它帮助我正确的方式。

首先,主类声明中有一个错误,因为它应该遵循新的方法,即以下面的格式:

 mainClassName = '[your_namespace].[your_arctifact]Kt' 

namespace =软件包名称

arctifact =文件名

所以,考虑上面例子中的文件名是: Hello.kt ,命名空间是hello的名字,那么:

 mainClassName = `[hello].[Hello]Kt` 

使用以前的方法,其中包含:

 apply plugin: 'application' mainClassName = 'hello.HelloKt' 

生成的.jar文件不包括kotlin运行时,所以执行它的唯一方法是:

 d:/App/build/libs/kotlin -cp App.jar hello.HelloKt 

但为了生成一个可以自行执行的自包含的jar ,并且包含kotlin runtime那么build.gradle应该写成:

 // set up the kotlin-gradle plugin buildscript { ext.kotlin_version = '1.1.2-2' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } // apply the kotlin-gradle plugin apply plugin: "kotlin" // add kotlin-stdlib dependencies. repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } jar { manifest { //Define mainClassName as: '[your_namespace].[your_arctifact]Kt' attributes 'Main-Class': 'hello.HelloKt' } // NEW LINE HERE !!! from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 

接着gradle build ,在build/libs文件夹下生成[your_working_folder].jar文件,假定工作文件夹名称是app,那么文件app.jar就会生成。

要运行该文件,可以使用以下2个命令之一:

 D:\App\build\libs\java -jar App.jar 

要么

 D:\App\build\libs\kotlin App.jar hello.HelloKt