Convert to multi-platform project structure

Closes #12
This commit is contained in:
Tristan Hamilton 2020-06-05 16:26:40 +01:00 committed by Michael Bull
parent f8ce59b3fb
commit bca344daaf
26 changed files with 141 additions and 112 deletions

View File

@ -1,6 +1,5 @@
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val ossrhUsername: String? by ext val ossrhUsername: String? by ext
val ossrhPassword: String? by ext val ossrhPassword: String? by ext
@ -10,7 +9,7 @@ description = "A Result monad for modelling success or failure operations."
plugins { plugins {
`maven-publish` `maven-publish`
signing signing
kotlin("jvm") version "1.3.72" kotlin("multiplatform") version "1.3.72"
id("org.jetbrains.dokka") version "0.10.1" id("org.jetbrains.dokka") version "0.10.1"
id("com.github.ben-manes.versions") version "0.28.0" id("com.github.ben-manes.versions") version "0.28.0"
id("net.researchgate.release") version "2.8.1" id("net.researchgate.release") version "2.8.1"
@ -18,52 +17,6 @@ plugins {
id("org.jetbrains.kotlin.plugin.allopen") version "1.3.72" id("org.jetbrains.kotlin.plugin.allopen") version "1.3.72"
} }
allprojects {
repositories {
mavenCentral()
jcenter()
maven("https://dl.bintray.com/kotlin/kotlinx")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf("-Xuse-experimental=kotlin.contracts.ExperimentalContracts")
}
}
}
allOpen {
annotation("org.openjdk.jmh.annotations.State")
annotation("org.openjdk.jmh.annotations.BenchmarkMode")
}
sourceSets.create("benchmark") {
java {
srcDir("src/benchmarks/kotlin")
}
}
val benchmarkImplementation by configurations
benchmark {
targets {
register("benchmark")
}
}
dependencies {
implementation(kotlin("stdlib"))
testImplementation("junit:junit:4.13")
testImplementation(kotlin("test-common"))
testImplementation(kotlin("test-annotations-common"))
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("test"))
benchmarkImplementation(sourceSets.main.get().output + sourceSets.main.get().runtimeClasspath)
benchmarkImplementation("org.jetbrains.kotlinx:kotlinx.benchmark.runtime-jvm:0.2.0-dev-8")
}
tasks.withType<DependencyUpdatesTask> { tasks.withType<DependencyUpdatesTask> {
rejectVersionIf { rejectVersionIf {
listOf("alpha", "beta", "rc", "cr", "m", "eap", "pr").any { listOf("alpha", "beta", "rc", "cr", "m", "eap", "pr").any {
@ -85,11 +38,82 @@ val javadocJar by tasks.registering(Jar::class) {
from(dokka.get().outputDirectory) from(dokka.get().outputDirectory)
} }
val sourcesJar by tasks.registering(Jar::class) { allprojects {
group = LifecycleBasePlugin.BUILD_GROUP repositories {
description = "Assembles a jar archive containing the main classes with sources." mavenCentral()
archiveClassifier.set("sources") jcenter()
from(sourceSets["main"].allSource) maven("https://dl.bintray.com/kotlin/kotlinx")
}
}
allOpen {
annotation("org.openjdk.jmh.annotations.State")
annotation("org.openjdk.jmh.annotations.BenchmarkMode")
}
sourceSets.create("benchmark")
benchmark {
targets {
register("jvmBenchmark")
}
}
kotlin {
jvm {
withJava()
mavenPublication {
artifact(javadocJar.get())
}
compilations.all {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
sourceSets {
all {
languageSettings.apply {
useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts")
}
}
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val jvmMain by getting {
dependencies {
implementation(kotlin("stdlib-jdk8"))
}
}
val jvmTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation(kotlin("test"))
}
}
val jvmBenchmark by getting {
dependsOn(jvmMain)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx.benchmark.runtime-jvm:0.2.0-dev-8")
}
}
}
} }
publishing { publishing {
@ -108,64 +132,58 @@ publishing {
} }
} }
publications { publications.withType<MavenPublication> {
register("mavenJava", MavenPublication::class) { pom {
from(components["java"]) name.set(project.name)
artifact(javadocJar.get()) description.set(project.description)
artifact(sourcesJar.get()) url.set("https://github.com/michaelbull/kotlin-result")
inceptionYear.set("2017")
pom { licenses {
name.set(project.name) license {
description.set(project.description) name.set("ISC License")
url.set("https://opensource.org/licenses/isc-license.txt")
}
}
developers {
developer {
name.set("Michael Bull")
url.set("https://www.michael-bull.com")
}
}
contributors {
contributor {
name.set("Kevin Herron")
url.set("https://github.com/kevinherron")
}
contributor {
name.set("Markus Padourek")
url.set("https://github.com/Globegitter")
}
contributor {
name.set("Tristan Hamilton")
url.set("https://github.com/Munzey")
}
}
scm {
connection.set("scm:git:https://github.com/michaelbull/kotlin-result")
developerConnection.set("scm:git:git@github.com:michaelbull/kotlin-result.git")
url.set("https://github.com/michaelbull/kotlin-result") url.set("https://github.com/michaelbull/kotlin-result")
inceptionYear.set("2017") }
licenses { issueManagement {
license { system.set("GitHub")
name.set("ISC License") url.set("https://github.com/michaelbull/kotlin-result/issues")
url.set("https://opensource.org/licenses/isc-license.txt") }
}
}
developers { ciManagement {
developer { system.set("GitHub")
name.set("Michael Bull") url.set("https://github.com/michaelbull/kotlin-result/actions?query=workflow%3Aci")
url.set("https://www.michael-bull.com")
}
}
contributors {
contributor {
name.set("Kevin Herron")
url.set("https://github.com/kevinherron")
}
contributor {
name.set("Markus Padourek")
url.set("https://github.com/Globegitter")
}
contributor {
name.set("Tristan Hamilton")
url.set("https://github.com/Munzey")
}
}
scm {
connection.set("scm:git:https://github.com/michaelbull/kotlin-result")
developerConnection.set("scm:git:git@github.com:michaelbull/kotlin-result.git")
url.set("https://github.com/michaelbull/kotlin-result")
}
issueManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/issues")
}
ciManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/actions?query=workflow%3Aci")
}
} }
} }
} }

View File

@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins {
application application
kotlin("jvm") kotlin("jvm")
@ -22,3 +24,9 @@ dependencies {
implementation("io.ktor:ktor-server-netty:$ktorVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion")
implementation("io.ktor:ktor-gson:$ktorVersion") implementation("io.ktor:ktor-gson:$ktorVersion")
} }
tasks.withType(KotlinCompile::class.java).all {
kotlinOptions {
jvmTarget = "1.8"
}
}

View File

@ -38,11 +38,7 @@ inline fun <V, E> binding(crossinline block: ResultBinding<E>.() -> V): Result<V
} }
} }
internal object BindException : Exception() { internal expect object BindException : Exception
override fun fillInStackTrace(): Throwable {
return this
}
}
interface ResultBinding<E> { interface ResultBinding<E> {
fun <V> Result<V, E>.bind(): V fun <V> Result<V, E>.bind(): V

View File

@ -0,0 +1,7 @@
package com.github.michaelbull.result
internal actual object BindException : Exception() {
override fun fillInStackTrace(): Throwable {
return this
}
}