However, kotlinxserializer is not found anymore :d...
# ktor
j
However, kotlinxserializer is not found anymore 😞
Copy code
import io.ktor.client.features.json.serializer.*
//....

install(JsonFeature) {
    serializer = KotlinxSerializer(json)
}
Does anyone know where it went?
My dependencies are:
Copy code
org.jetbrains.kotlinx:kotlinx-serialization-core:1.0.0-RC2
org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0-RC2

io.ktor:ktor-client-core:1.4.1
io.ktor:ktor-client-json:1.4.1
io.ktor:ktor-client-serialization:1.4.1
io.ktor:ktor-client-logging:1.4.1
With serialization 1.0.0-RC and ktor 1.4.0 it was working
p
Oh I see you are talking about client
I am talking about server
e
Hey, @Joost Klitsie. I can't reproduce the problem, could you file YT issue with reproducer?
j
@e5l thanks for checking! which dependencies do you use? Btw I am using a kotlin multiplatform project, could that be a reason?
e
Yep, it can. Since 1.4.0 you have to specify only common dependency(and drop all platform dependencies)
p
@e5l What dependencies would you use for a production project? ktor 1.4.1 and kotlinx.serialization 1.0.0-RC2?
j
I didn't invalidate my caches yet, see what happens..
okay nothing still
okay I put in the js dependency and the jvm dependency separately
e
Could you list the sourceSets block here with dependencies?
j
Copy code
object Ktor {

    private const val Group = "io.ktor"

    private const val Version = "1.4.1"

    private fun ktor(dependency: String) = group(Group, dependency, Version)

    object Server {

        private const val Serialization = "ktor-serialization"
        private const val Certificates = "ktor-network-tls-certificates"
        private const val Netty = "ktor-server-netty"
        private const val Core = "ktor-server-core"
        private const val Sessions = "ktor-server-sessions"
        private const val WebSockets = "ktor-websockets"
        private const val AuthJwt = "ktor-auth-jwt"
        private const val Test = "ktor-server-tests"

        fun DependencyHandlerScope.implementKtorServerTest(flavor: String = "test") {
            implementation(ktor(Test), flavor)
        }

        fun DependencyHandlerScope.implementKtorServer(flavor: String = "") {
            implementation(ktor(Serialization), flavor)
            implementation(ktor(Certificates), flavor)
            implementation(ktor(Netty), flavor)
            implementation(ktor(Core), flavor)
            implementation(ktor(Sessions), flavor)
            implementation(ktor(WebSockets), flavor)
            implementation(ktor(AuthJwt), flavor)
        }

    }

    object Client {

        private const val Core = "ktor-client-core"
        private const val OkHttp = "ktor-client-okhttp"
        private const val Json = "ktor-client-json"
        private const val Serialization = "ktor-client-serialization"
        private const val SerializationJS = "ktor-client-serialization-js"
        private const val SerializationJvm = "ktor-client-serialization-jvm"
        private const val Logging = "ktor-client-logging"

        fun DependencyHandlerScope.implementKtorClientCommon(flavor: String = "") {
            implementation(ktor(Core), flavor)
            implementation(ktor(Json), flavor)
            implementation(ktor(Serialization), flavor)
            implementation(ktor(Logging), flavor)
        }

        fun DependencyHandlerScope.implementKtorClientSerializationJS(flavor: String = "") {
            implementation(ktor(SerializationJS), flavor)
        }
        fun DependencyHandlerScope.implementKtorClientSerializationJVM(flavor: String = "") {
            implementation(ktor(SerializationJvm), flavor)
        }

        fun DependencyHandlerScope.implementKtorClientAndroid(flavor: String = "") {
            implementation(ktor(OkHttp), flavor)
        }

    }

}
so
Copy code
private const val SerializationJS = "ktor-client-serialization-js"
        private const val SerializationJvm = "ktor-client-serialization-jvm"
did NOT exist
then in my build.gradle
Copy code
dependencies {
    val common = "commonMain"
    val android = "androidMain"
    val js = "jsMain"

    /**
     * COMMON dependencies
     */
    implementCoroutinesCommon(common)
    implementSerializationCommon(common)
    implementKtorClientCommon(common)
    implementKodeinCommon(common)
    implementKlock(common)

    implementKtorClientSerializationJS(js)
    implementKtorClientSerializationJVM(android)
    /**
     * ANDROID dependencies
     */
    implementKtorClientAndroid(android)
    implementOkhttpLogging(android)
    implementKodeinAndroid(android)

}
Copy code
kotlin {

    val architecture_components_version = "2.2.0"
    val navVersion = "2.3.0-alpha06"
    android("android") {
        compilations.all {
            compileKotlinTask.kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }
    js() {
        compilations.all {
            compileKotlinTask.kotlinOptions {
                moduleKind = "commonjs"
                sourceMap = true
                metaInfo = true
                sourceMapEmbedSources = null
            }
        }
        useCommonJs()
        binaries.executable()

        browser {
            runTask {
                devServer = KotlinWebpackConfig.DevServer(
                    port = 8082,
                    contentBase = listOf("${projectDir.path}/src/jsMain/resources")
                )
            }
            dceTask {
                keep("ktor-ktor-io.\$\$importsForInline\$\$.<http://ktor-ktor-io.io.ktor.utils.io|ktor-ktor-io.io.ktor.utils.io>")
            }
        }
    }
    sourceSets {
        all {
            languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
            languageSettings.useExperimentalAnnotation("kotlinx.coroutines.ExperimentalCoroutinesApi")
            languageSettings.useExperimentalAnnotation("kotlinx.coroutines.FlowPreview")
            languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
        }
I just added the kotlinXSerializer in the jsMain and the androidMain sourcesets 🙂
s
I am also having issues with RC2.
p
@Sourabh Rawat Are you seeing the same issue that I have?
e
@Joost Klitsie, since kotlin 1.4.0 you have to avoid using platform artifacts(such as
ktor-client-serialization-jvm
) and replace them with common(
ktor-client-serialization
) in the common source set
s
I was getting
kotlinx.serialization.json
not found
@e5l thats interesting. Any doc specifying how to do that? I mean, I have a multiplatform lib with k1.4 and I publish all artifacts x, x-jvm, x-native, x-metada. And when I use it in a jvm app, I have to use x-jvm, not just x.
j
@e5l I know, with ktor 1.4.0 I had that set up and it was running fine. But somehow didn't resolve the serialization for me with 1.4.1
Somehow my setup doesn't resolve io.ktorktor client serialization1.4.1 properly and it looks like it doesn't download the platform specific dependencies
so if I add those myself, it runs
e
@h0tk3y