设置多平台项目

时间:2017-12-08 20:10:29

标签: kotlin kotlin-multiplatform

考虑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个文件,但是一旦我尝试运行它,我就收到了错误:

  

错误:无法找到或加载主类hello.MainKt

我试图使用下面的2选项运行它,但是对于bot来说也有同样的错误:

选项1:

kotlin -cp <filename>.jar hello.MainKt

选项2:

java -jar <filename>.jar

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

enter image description here

1 个答案:

答案 0 :(得分:1)

使用Kotlin 1.2,常见模块不会生成二进制文件(如.class文件),只会生成元数据文件。即使您未在任何地方使用expect关键字,也是如此

所以你必须创建另一个包含类似内容的模块:

apply plugin: 'kotlin-platform-jvm'

对于您的公共模块,JVM模块还需要expectedBy中的dependencies条目。另外,您当然可能需要相应的JS模块。

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