plugins { id 'org.jetbrains.kotlin.multiplatform' id 'org.jetbrains.kotlin.plugin.atomicfu' id 'org.jetbrains.kotlin.plugin.serialization' id 'com.android.library' } android { compileSdkVersion rootProject.ext.version_android_compile_sdk buildTypes { release { consumerProguardFiles 'proguard-rules.pro' } } defaultConfig { minSdkVersion 21 targetSdkVersion rootProject.ext.version_android_target_sdk testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } packagingOptions { resources { excludes += ['META-INF/INDEX.LIST', '**/*.kotlin_metadata', 'META-INF/*.kotlin_module', 'licenses/**.TXT'] } } compileOptions { sourceCompatibility = '17' targetCompatibility = '17' } namespace 'com.ustadmobile.port.sharedse' tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { kotlinOptions { jvmTarget = "17" } } } sourceCompatibility = '17' targetCompatibility = '17' group rootProject.group version rootProject.version kotlin { jvm { compilations.main.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } compilations.test.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } } //Unfortunately there isn't really an elegant way to create a sourceset for one module //The section below can be uncommented for development so that autocomplete works for JVM libraries // see https://youtrack.jetbrains.com/issue/KT-28194 // It should be commented out again before running jvmTest. /*jvm("commonJvm") { compilations.main.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } }*/ android() jvm { compilations.main.kotlinOptions { // Setup the Kotlin compiler options for the 'main' compilation: jvmTarget = "$version_kotlin_jvmTarget" } } sourceSets { commonMain { dependencies { implementation project(":core") implementation project(":lib-util") implementation libs.kotlin.stdlib.common implementation libs.coroutines implementation libs.kotlinx.serialization implementation libs.ktor.client.core implementation libs.ktor.client.json implementation libs.ktor.io implementation libs.ktor.client.content.negotiation implementation libs.napier implementation libs.kodein.di implementation libs.atomicfu implementation libs.door.runtime implementation project(':lib-database') implementation libs.xmlpullparsekmp } } commonJvmMain { dependencies { implementation libs.nanohttpd implementation libs.nanohttpd.nanolets implementation libs.okhttp implementation libs.kxml2 implementation libs.kotlinx.serialization implementation libs.nv.i18n implementation libs.ktor.client.okhttp implementation libs.ktor.io.jvm implementation libs.kodein.di implementation libs.xmlpullparsekmp } } /* Normally we would add a sourceSet and then use dependsOn. Unfortunately this does not work when running unit tests in the IDE. */ androidMain { dependsOn commonMain dependsOn commonJvmMain dependencies { implementation libs.kotlin.stdlib.jdk8 implementation libs.kotlinx.coroutines.android implementation libs.androidx.lifecycle.livedata implementation libs.androidx.lifecycle.livedata.ktx implementation libs.androidx.work.runtime implementation libs.kodein.di.framework.android.x implementation libs.androidx.room.runtime implementation libs.android.material implementation libs.ktor.client.okhttp implementation libs.nanohttpd implementation libs.nanohttpd.nanolets //Begin SharedSE Android and JVM dependencies implementation libs.okhttp //end SharedSE Android and JVM dependencies } } jvmMain { dependsOn commonMain dependsOn commonJvmMain dependencies { implementation libs.kotlin.stdlib.jdk8 implementation libs.coroutines implementation libs.ktor.client.okhttp //Begin Android and JVM dependencies implementation libs.nanohttpd implementation libs.nanohttpd.nanolets implementation libs.okhttp //end Android and JVM dependencies } } commonTest { dependencies { } } jvmTest { dependencies { implementation project(":lib-test-common") implementation libs.napier implementation libs.junit implementation libs.ktor.server.netty implementation libs.mockwebserver implementation libs.okhttp implementation libs.napier.jvm implementation libs.mockito.kotlin implementation libs.simplejndi implementation libs.apache.commons.pool2 implementation libs.sqlite.jdbc implementation libs.commons.dbcp2 implementation libs.kodein.di.framework.ktor.server.jvm api project(":sharedse") api project(":app-ktor-server") } } } } /* * This might be required to be able to run unit tests via the IDE. */ task copyTestResources(type: Copy) { outputs.upToDateWhen { project.file("build/local.env.properties").exists() } from project.file("src/commonTest/resources") into rootProject.file("build/classes/test/sharedse_jvmTest") doFirst { println("Dump sharedse local.env.properties") if (!project.file("build").exists()) project.file("build").mkdir() def outWriter = new FileWriter(project.file("build/local.env.properties")) System.getProperties().store(outWriter, "System properties for use with running unit tests in IDE") outWriter.flush() outWriter.close() } } tasks.whenTaskAdded { task -> if (task.name == "compileTestKotlinJvm") { println("Add task to jvmTest") task.dependsOn(copyTestResources) } } jvmTest.dependsOn(copyTestResources)