diff --git a/.circleci/config.pkl b/.circleci/config.pkl index f35042a5e..cb892d73b 100644 --- a/.circleci/config.pkl +++ b/.circleci/config.pkl @@ -141,11 +141,11 @@ local buildNativeJobs: Mapping = new { local gradleCheckJobs: Mapping = new { ["gradle-check-jdk11"] { - javaVersion = "11.0" + javaVersion = "11" isRelease = false } ["gradle-check-jdk17"] { - javaVersion = "17.0" + javaVersion = "17" isRelease = false } } diff --git a/.circleci/config.yml b/.circleci/config.yml index c21303fc2..7ccbb9218 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -583,7 +583,7 @@ jobs: steps: - checkout - run: - command: ./gradlew --info --stacktrace check + command: ./gradlew --info --stacktrace check -DPKL_JVM_VERSION=11 name: gradle check - run: command: |- @@ -601,7 +601,7 @@ jobs: steps: - checkout - run: - command: ./gradlew --info --stacktrace check + command: ./gradlew --info --stacktrace check -DPKL_JVM_VERSION=17 name: gradle check - run: command: |- @@ -614,7 +614,7 @@ jobs: environment: LANG: en_US.UTF-8 docker: - - image: cimg/openjdk:17.0 + - image: cimg/openjdk:11.0 bench: steps: - checkout diff --git a/.circleci/jobs/GradleCheckJob.pkl b/.circleci/jobs/GradleCheckJob.pkl index cf9b70b3f..64a2b5880 100644 --- a/.circleci/jobs/GradleCheckJob.pkl +++ b/.circleci/jobs/GradleCheckJob.pkl @@ -17,19 +17,19 @@ extends "GradleJob.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.1.0#/Config.pkl" -javaVersion: "11.0"|"17.0" +javaVersion: "11"|"17" steps { new Config.RunStep { name = "gradle check" - command = "./gradlew \(module.gradleArgs) check" + command = "./gradlew \(module.gradleArgs) check -DPKL_JVM_VERSION=\(javaVersion)" } } job { docker { new { - image = "cimg/openjdk:\(javaVersion)" + image = "cimg/openjdk:11.0" } } } diff --git a/DEVELOPMENT.adoc b/DEVELOPMENT.adoc index 0062a780c..3c258b152 100644 --- a/DEVELOPMENT.adoc +++ b/DEVELOPMENT.adoc @@ -2,11 +2,9 @@ :uri-gng: https://gng.dsun.org :uri-jenv: https://www.jenv.be :uri-intellij: https://www.jetbrains.com/idea/download/ -:uri-jdk: https://adoptopenjdk.net/releases.html == Setup -. (mandatory) Install {uri-jdk}[OpenJDK 11 HotSpot] (as long as we support JDK11) . (recommended) Install {uri-intellij}[IntelliJ IDEA 2023.x] + To import the project into IntelliJ, go to File->Open and select the project's root directory. If the project is opened but not imported, look for a popup in the lower right corner diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index e8bf11759..adff1fc48 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.config.JvmTarget - plugins { `kotlin-dsl` } @@ -17,17 +15,6 @@ dependencies { implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) } -java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 -} - kotlin { - target { - compilations.configureEach { - kotlinOptions { - jvmTarget = "11" - } - } - } + jvmToolchain(11) } diff --git a/buildSrc/src/main/kotlin/JvmToolchain.kt b/buildSrc/src/main/kotlin/JvmToolchain.kt new file mode 100644 index 000000000..bd41936d3 --- /dev/null +++ b/buildSrc/src/main/kotlin/JvmToolchain.kt @@ -0,0 +1,13 @@ +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JvmVendorSpec + +private const val JDK_VERSION = 11 + +val jvmToolchainVersion: JavaLanguageVersion + get() { + val jvmVersion = System.getProperty("PKL_JVM_VERSION")?.toInt() ?: JDK_VERSION + return JavaLanguageVersion.of(jvmVersion) + } + +val jvmToolchainVendor: JvmVendorSpec + get() = JvmVendorSpec.ADOPTIUM diff --git a/buildSrc/src/main/kotlin/pklAllProjects.gradle.kts b/buildSrc/src/main/kotlin/pklAllProjects.gradle.kts index 4daf287a7..8c4768f89 100644 --- a/buildSrc/src/main/kotlin/pklAllProjects.gradle.kts +++ b/buildSrc/src/main/kotlin/pklAllProjects.gradle.kts @@ -22,15 +22,8 @@ configurations { } } -plugins.withType(JavaPlugin::class).configureEach { - val java = project.extensions.getByType() - java.sourceCompatibility = JavaVersion.VERSION_11 - java.targetCompatibility = JavaVersion.VERSION_11 -} - tasks.withType().configureEach { kotlinOptions { - jvmTarget = "11" freeCompilerArgs = freeCompilerArgs + listOf("-Xjsr305=strict", "-Xjvm-default=all") } } diff --git a/buildSrc/src/main/kotlin/pklFatJar.gradle.kts b/buildSrc/src/main/kotlin/pklFatJar.gradle.kts index 675e2dbf8..9fa7e4286 100644 --- a/buildSrc/src/main/kotlin/pklFatJar.gradle.kts +++ b/buildSrc/src/main/kotlin/pklFatJar.gradle.kts @@ -43,7 +43,7 @@ val relocations = mapOf( // pkl-doc dependencies "org.commonmark." to "org.pkl.thirdparty.commonmark.", "org.jetbrains." to "org.pkl.thirdparty.jetbrains.", - + // pkl-config-java dependencies "io.leangen.geantyref." to "org.pkl.thirdparty.geantyref.", @@ -54,6 +54,13 @@ val relocations = mapOf( "com.squareup.kotlinpoet." to "org.pkl.thirdparty.kotlinpoet.", ) +java { + toolchain { + languageVersion.set(jvmToolchainVersion) + vendor.set(jvmToolchainVendor) + } +} + val nonRelocations = listOf("com/oracle/truffle/") tasks.shadowJar { @@ -117,7 +124,7 @@ val validateFatJar by tasks.registering { val path = fileDetails.relativePath.pathString if (!(fileDetails.isDirectory || path.startsWith("org/pkl/") || - path.startsWith("META-INF/") || + path.startsWith("META-INF/") || nonRelocations.any { path.startsWith(it) })) { // don't throw exception inside `visit` // as this gives a misleading "Could not expand ZIP" error message diff --git a/buildSrc/src/main/kotlin/pklJavaLibrary.gradle.kts b/buildSrc/src/main/kotlin/pklJavaLibrary.gradle.kts index a79d78347..4db4c2200 100644 --- a/buildSrc/src/main/kotlin/pklJavaLibrary.gradle.kts +++ b/buildSrc/src/main/kotlin/pklJavaLibrary.gradle.kts @@ -17,6 +17,15 @@ val libs = the() java { withSourcesJar() // creates `sourcesJar` task withJavadocJar() + + toolchain { + languageVersion.set(jvmToolchainVersion) + vendor.set(jvmToolchainVendor) + } +} + +tasks.withType().configureEach { + javaLauncher.set(javaToolchains.launcherFor(java.toolchain)) } artifacts { diff --git a/buildSrc/src/main/kotlin/pklKotlinLibrary.gradle.kts b/buildSrc/src/main/kotlin/pklKotlinLibrary.gradle.kts index cbc728365..69a927719 100644 --- a/buildSrc/src/main/kotlin/pklKotlinLibrary.gradle.kts +++ b/buildSrc/src/main/kotlin/pklKotlinLibrary.gradle.kts @@ -24,6 +24,11 @@ tasks.compileKotlin { enabled = true // disabled by pklJavaLibrary } +kotlin.jvmToolchain { + languageVersion.set(jvmToolchainVersion) + vendor.set(jvmToolchainVendor) +} + spotless { kotlin { ktfmt(libs.versions.ktfmt.get()).googleStyle() diff --git a/buildSrc/src/main/kotlin/pklKotlinTest.gradle.kts b/buildSrc/src/main/kotlin/pklKotlinTest.gradle.kts index 0b40c9564..b348835c5 100644 --- a/buildSrc/src/main/kotlin/pklKotlinTest.gradle.kts +++ b/buildSrc/src/main/kotlin/pklKotlinTest.gradle.kts @@ -16,6 +16,11 @@ dependencies { testRuntimeOnly(buildInfo.libs.findLibrary("junitEngine").get()) } +kotlin.jvmToolchain { + languageVersion.set(jvmToolchainVersion) + vendor.set(jvmToolchainVendor) +} + tasks.withType().configureEach { val testTask = this diff --git a/settings.gradle.kts b/settings.gradle.kts index 1fc89a8d3..5a419f60f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -27,6 +27,10 @@ pluginManagement { } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + @Suppress("UnstableApiUsage") dependencyResolutionManagement { repositories { @@ -34,11 +38,6 @@ dependencyResolutionManagement { } } -val javaVersion = JavaVersion.current() -require(javaVersion.isJava11Compatible) { - "Project requires Java 11 or higher, but found ${javaVersion.majorVersion}." -} - if (gradle.startParameter.taskNames.contains("updateDependencyLocks") || gradle.startParameter.taskNames.contains("uDL") ) {