我正在尝试创建一个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"])
}
直接从文档中获得。
我做错了什么愚蠢的小事?
谢谢!