与Gradle一起使用Kotlin
我是Kotlin
和Gradle
新手,并试图遵循这些步骤,所以我得到了以下两个文件:
运行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<String>) { 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
- Instrumentation测试无法在包含Kotlin文件的Android库模块中运行
- java.lang.VerifyError用kotlin创建一个gradle任务
- 如何在多项目中使用Spek来设置Jacoco?
- 重复条目:META-INF / myLibrary.kotlin_module
- 无法使Coverity Scan工作(Windows和Travis上的Java / Kotlin / Gradle 3.3)
- 制作模块化Gradle项目的最佳方法
- 使用Gradle构建一个与Kotlin-DSL相关的jar
- 如何调试NoClassDefFoundError(Gradle,Kotlin)
- 将Kotlin添加到现有Java项目会打破Android Studio gradle消息错误