Kotlin通用模块gradle脚本,没有实际的平台特定代码

时间:2018-08-03 18:57:04

标签: gradle intellij-idea kotlin cross-platform

我正在尝试创建一个kotlin公用库,其中包含将由多个平台使用的共享业务逻辑。库 itself 对平台提供的任何内容都没有 no 依赖性。它是纯Kotlin(主要是数据类和转换助手)。

我正在使用Kotlin 1.2.51和Intellij IDEA 2018.2。我已经为kotlinx安装了额外的intellij插件。

公共库也依赖于https://github.com/Kotlin/kotlinx.serialization,但没有其他依赖项。

我花了几个小时试图缠住我的头并修复gradle脚本,但无济于事。我希望能够在common模块中编写单元测试。平台特定的模块不需要任何其他测试,因为没有平台特定的逻辑。

通用模块具有所有代码完成功能,并且构建脚本可以正常工作。我可以编写测试。当我尝试在IDE中运行这些测试之一时,它会通过jvm运行(有意义)

该jvm测试无法通过以下方式进行编译:

java.lang.NoClassDefFoundError: kotlinx/serialization/json/JsonTreeParser

JsonTreeParser是kotlinx序列化模块的一部分。 IDE可以很好地显示它。通用模块可以很好地导入它。

这是我的gradle脚本:

常用模块

buildscript {
    ext.kotlin_version = '1.2.51'
    ext.serialization_version = '0.6.0'

    repositories {
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx" }
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlinx:kotlinx-gradle-serialization-plugin:$serialization_version"
    }
}

plugins {
    id 'kotlin-platform-common' version '1.2.51'
}

apply plugin: 'kotlinx-serialization'

repositories {
    jcenter()
    maven { url "https://kotlin.bintray.com/kotlinx" }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-common"
    testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common"
    testCompile "org.jetbrains.kotlin:kotlin-test-common"

    compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
}

jvm模块

buildscript {
    ext.kotlin_version = '1.2.51'
    ext.serialization_version = '0.6.0'

    repositories {
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx" }
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlinx:kotlinx-gradle-serialization-plugin:$serialization_version"
    }
}

plugins {
    id 'kotlin-platform-jvm' version '1.2.51'
}

apply plugin: 'kotlinx-serialization'

repositories {
    jcenter()
    maven { url "https://kotlin.bintray.com/kotlinx" }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    expectedBy project(":jpatch-kotlin-common")
    testCompile "junit:junit:4.12"
    testCompile "org.jetbrains.kotlin:kotlin-test"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit"

    compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
sourceCompatibility = "1.8"

我的测试在通用模块中

@Test
fun it_does_stuff() {
    assertEquals(true, true)
    val patch = JsonPatch()
    assertEquals(3, patch.cool())

    val input = """{"a": "foo", "b": 10, "c": true, "d": null}"""
    val elem: JsonElement = JsonTreeParser(input).read() // or .readFully() to throw exception if input was not consumed fully

    elem as JsonObject
    elem.keys == setOf("a", "b", "c", "d") // true
    assertEquals(JsonLiteral("foo"), elem["a"])
}

直接从文档中获得。

我做错了什么愚蠢的小事?

谢谢!

0 个答案:

没有答案