@@ -2,7 +2,10 @@ import app.cash.sqldelight.core.capitalize
22import com.powersync.plugins.sonatype.setupGithubRepository
33import de.undercouch.gradle.tasks.download.Download
44import org.gradle.internal.os.OperatingSystem
5+ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
6+ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
57import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
8+ import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest
69import java.util.*
710
811plugins {
@@ -76,8 +79,20 @@ val buildCInteropDef by tasks.registering {
7679kotlin {
7780 androidTarget {
7881 publishLibraryVariants(" release" , " debug" )
82+
83+ @OptIn(ExperimentalKotlinGradlePluginApi ::class )
84+ compilerOptions {
85+ jvmTarget.set(JvmTarget .JVM_17 )
86+ }
87+ }
88+ jvm {
89+ @OptIn(ExperimentalKotlinGradlePluginApi ::class )
90+ compilerOptions {
91+ jvmTarget.set(JvmTarget .JVM_1_8 )
92+ // https://jakewharton.com/kotlins-jdk-release-compatibility-flag/
93+ freeCompilerArgs.add(" -Xjdk-release=8" )
94+ }
7995 }
80- jvm()
8196
8297 iosX64()
8398 iosArm64()
@@ -147,8 +162,8 @@ kotlin {
147162}
148163
149164android {
150- kotlin {
151- jvmToolchain( 17 )
165+ compileOptions {
166+ targetCompatibility = JavaVersion . VERSION_17
152167 }
153168
154169 buildFeatures {
@@ -339,6 +354,22 @@ tasks.named<ProcessResources>(kotlin.jvm().compilations["main"].processResources
339354 from(getBinaries, downloadPowersyncDesktopBinaries)
340355}
341356
357+ // We want to build with recent JDKs, but need to make sure we support Java 8. https://jakewharton.com/build-on-latest-java-test-through-lowest-java/
358+ val testWithJava8 by tasks.registering(KotlinJvmTest ::class ) {
359+ javaLauncher = javaToolchains.launcherFor {
360+ languageVersion = JavaLanguageVersion .of(8 )
361+ }
362+
363+ description = " Run tests with Java 8"
364+ group = LifecycleBasePlugin .VERIFICATION_GROUP
365+
366+ // Copy inputs from the normal test task
367+ val testTask = tasks.getByName(" jvmTest" ) as KotlinJvmTest
368+ classpath = testTask.classpath
369+ testClassesDirs = testTask.testClassesDirs
370+ }
371+ tasks.named(" check" ).configure { dependsOn(testWithJava8) }
372+
342373afterEvaluate {
343374 val buildTasks =
344375 tasks.matching {
0 commit comments