设置多平台项目

Setting Up a Multiplatform Project

考虑 Kotlin 1.2 引入 kotlin-platform-common 我正在尝试构建我的第一个通用 .class 文件,所以我做了以下操作:

main.kt:

package hello

fun main() {
    println("kotlin!")
} 

gradle.build:

group 'h'
version 'prn'

buildscript {
    ext.kotlin_version = '1.2.0'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin-platform-common'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}

sourceSets {
    main.kotlin.srcDirs += 'src/kotlin'
    main.resources.srcDirs += 'src/resources'
}

jar {
    manifest {
        attributes 'Main-Class': 'hello.MainKt'
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

那我运行gradle build

Q1- 我找不到任何生成的 .class 文件?如何生成它,我应该在哪里找到它?

Q2- 我生成了一个 .jar 文件,但是当我尝试 运行 它时,我收到一个错误:

Error: Could not find or load main class hello.MainKt

我尝试 运行 它使用下面的 2 个选项,但是对于 bot 出现了同样的错误:

选项 1:

kotlin -cp <filename>.jar hello.MainKt

选项 2:

java -jar <filename>.jar

项目结构和错误如下图所示:

在 Kotlin 1.2 中,通用模块不会生成二进制文件(如 .class 文件),只会生成元数据文件。这是真的 即使您不在任何地方使用 expect 关键字

因此您必须创建另一个模块,其中包含如下内容:

apply plugin: 'kotlin-platform-jvm'

JVM 模块还需要在 dependencies 中为您的通用模块添加一个 expectedBy 条目。另外,您当然可能需要相应的 JS 模块。

最好让 IntelliJ 为您创建整个多平台项目,然后编辑 Gradle 文件以适应,但此页面列出了手动步骤:https://kotlinlang.org/docs/reference/multiplatform.html#setting-up-a-multiplatform-project