Kotlin 1.3-M2: new multiplatform projects model

@nbransby Looks like the latest EAP version of kotlinx.coroutines is built with an earlier pre-release (1.3-M2) version of the compiler, and the 1.3.0-dev-* builds reject them. The easiest solution is to use a stable version of kotlinx.coroutines, though you can force the compiler to skip this check as well by passing -Xskip-metadata-version-check into the compiler args.

Also, the situation with kotlinx.coroutines and Gradle 4.8+ incompatibility is caused by the fact that the library’s Native parts have been published with Gradle metadata enabled, which is an experimental Gradle feature that is deliberately non-backward-compatible, according to the spec.

The same may happen with libraries built with kotlin-multiplatform and published with experimental Gradle metadata enabled: they may fail to get resolved with newer Gradle versions. Unfortunately, Gradle metadata is exactly what’s required for publishing a multiplatform library as a single Maven module, so, if a library is published with no metadata, one has to specify dependencies on its platform-specific parts (e.g. my-lib-jvm and my-lib-js) rather than a single dependency (my-lib) in case a library has Gradle metadata.

Overall, this publishing mode should be considered experimental until the Gradle metadata feature becomes stable.