commit | 9f9df8972c257464ae41ab6e2c95062fd6581d45 | [log] [tgz] |
---|---|---|
author | Leonid Startsev <sandwwraith@gmail.com> | Fri Dec 22 18:24:52 2017 +0300 |
committer | Leonid Startsev <sandwwraith@gmail.com> | Fri Dec 22 18:24:52 2017 +0300 |
tree | d33234d3967e3d0fd24177e184c349eb6f3956f5 | |
parent | ecea05d9204a16a6fe6ad95d9111cbd4f01af9d4 [diff] |
Set corresponding to plugin version and fix some broken things for release compiler
Kotlin serialization support consists of three parts: a gradle compiler plugin, which produces visitor/serializer code for objects, an IntelliJ plugin and a runtime library.
@Serializable
and standard collections.This project contains the runtime library. Runtime library provides:
KInput
, KOutput
).ElementValueInput/Output
, NamedValueInput/Output
, ElementValueTransformer
)You can open example projects for JVM or JS to get started playing with it.
import kotlinx.serialization.* import kotlinx.serialization.json.JSON @Serializable data class Data(val a: Int, @Optional val b: String = "42") fun main(args: Array<String>) { println(JSON.stringify(Data(42))) // {"a": 42, "b": "42"} val obj = JSON.parse<Data>("""{"a":42}""") // Data(a=42, b="42") }
To learn more about JSON usage and other formats, see usage. More examples of various kinds of Kotlin classes that can be serialized can be found here.
Using Kotlin Serialization requires Kotlin compiler 1.1.50
or higher, recommended version is 1.2.0
. Example projects on JVM are available for Gradle and Maven.
Ensure the proper version of Kotlin and add dependencies on plugin in addition to Kotlin compiler:
buildscript { ext.kotlin_version = '1.2.0' ext.serialization_version = '0.3' 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" } }
Don't forget to apply the plugin:
apply plugin: 'kotlin' apply plugin: 'kotlinx-serialization'
Add serialization runtime library in addition to Kotlin standard library and reflection (optional). For now, library requires small amount of reflection on runtime to find corresponding serializer for root-level type. In the future, we plan to move all resolving to separate module so the runtime library itself would not contain dependency on kotlin-reflect.
repositories { jcenter() maven { url "https://kotlin.bintray.com/kotlinx" } } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version" }
Ensure the proper version of Kotlin and serialization version:
<properties> <kotlin.version>1.2.0</kotlin.version> <serialization.version>0.3</serialization.version> </properties>
Include bintray repository for both library and plugin:
<repositories> <repository> <id>bintray-kotlin-kotlinx</id> <name>bintray</name> <url>https://kotlin.bintray.com/kotlinx</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>bintray-kotlin-kotlinx</id> <name>bintray-plugins</name> <url>https://kotlin.bintray.com/kotlinx</url> </pluginRepository> </pluginRepositories>
Add serialization plugin to Kotlin compiler plugin:
<build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <configuration> <compilerPlugins> <plugin>kotlinx-serialization</plugin> </compilerPlugins> </configuration> <dependencies> <dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-maven-serialization-plugin</artifactId> <version>${serialization.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
Add dependency on serialization runtime library:
<dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-serialization-runtime</artifactId> <version>${serialization.version}</version> </dependency>
Replace dependency on kotlinx-serialization-runtime
with kotlinx-serialization-runtime-js
or kotlinx-serialization-runtime-common
to use it in JavaScript and common projects, respectively. JavaScript example is located at example-js
folder.
Instead of using Gradle or Maven, IntelliJ IDEA relies on its own build system when analyzing and running code from within IDE. Because serialization is still highly experimental, it is shipped as a separate artifact from "big" Kotlin IDEA plugin. You can download additional IDEA plugin for working with projects that uses serialization from its TeamCity build page. In IDEA, open Settings - Plugins - Install plugin from disk...
and select downloaded .zip or .jar file. This installation will allow you to run code/tests from IDEA.
In case of issues with IDE, try to use gradle for running builds: Settings - Build, Execution, Deployment - Build Tools - Gradle - Runner -
tick Delegate IDE build/run actions to gradle
; or launch builds from console.