Migrate repo to use JVM toolchains Gradle feature.

^KT-46972 Fixed
This commit is contained in:
Yahor Berdnikau
2021-06-29 15:42:02 +02:00
committed by Space
parent 08d831934a
commit 7789054547
67 changed files with 424 additions and 723 deletions
+12 -12
View File
@@ -41,20 +41,20 @@ Support for multiplatform programming is one of Kotlins key benefits. It redu
## Build environment requirements
In order to build Kotlin distribution you need to have:
This repository is using [Gradle toolchains](https://docs.gradle.org/current/userguide/toolchains.html) feature
to select and auto-provision required JDKs from [AdoptOpenJdk](https://adoptopenjdk.net) project.
- JDK 1.6, 1.7, 1.8 and 9
- Setup environment variables as following:
Unfortunately [AdoptOpenJdk](https://adoptopenjdk.net) project does not provide required JDK 1.6 and 1.7 images,
so you could either download them manually and provide path to installation via `JDK_16` and `JDK_17` environment variables or
use following SDK managers:
- [Asdf-vm](https://asdf-vm.com/)
- [Jabba](https://github.com/shyiko/jabba)
- [SDKMAN!](https://sdkman.io/)
JAVA_HOME="path to JDK 1.8"
JDK_16="path to JDK 1.6"
JDK_17="path to JDK 1.7"
JDK_18="path to JDK 1.8"
JDK_9="path to JDK 9"
For local development, if you're not working on bytecode generation or the standard library, it's OK to have only JDK 1.8 and JDK 9 installed, and to point `JDK_16` and `JDK_17` environment variables to your JDK 1.8 installation.
You also can use [Gradle properties](https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties) to setup `JDK_*` variables.
Alternatively, it is still possible to only provide required JDKs via environment variables
(see [gradle.properties](./gradle.properties#L5) for supported variable names). To ensure Gradle uses only JDKs
from environmental variables - disable Gradle toolchain auto-detection by passing `-Porg.gradle.java.installations.auto-detect=false` option
(or put it into `$GRADLE_USER_HOME/gradle.properties`).
Note: The JDK 6 for MacOS is not available on Oracle's site. You can install it by
+4 -111
View File
@@ -1,7 +1,6 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.crypto.checksum.Checksum
import org.gradle.plugins.ide.idea.model.IdeaModel
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import proguard.gradle.ProGuardTask
buildscript {
@@ -56,13 +55,6 @@ pill {
val isTeamcityBuild = project.kotlinBuildProperties.isTeamcityBuild
val configuredJdks: List<JdkId> =
getConfiguredJdks().also {
it.forEach { jdkId ->
logger.info("Using ${jdkId.majorVersion} home: ${jdkId.homeDir}")
}
}
val defaultSnapshotVersion: String by extra
val buildNumber by extra(findProperty("build.number")?.toString() ?: defaultSnapshotVersion)
val kotlinVersion by extra(
@@ -114,37 +106,6 @@ subprojects {
extra["kotlinNativeVersion"] = kotlinNativeVersionObject
}
// Work-around necessary to avoid setting null javaHome. Will be removed after support of lazy task configuration
val jdkNotFoundConst = "JDK NOT FOUND"
if (isTeamcityBuild) {
extra["JDK_16"] = jdkPath("1.6")
extra["JDK_17"] = jdkPath("1.7")
} else {
extra["JDK_16"] = jdkPath("1.6", "1.8")
extra["JDK_17"] = jdkPath("1.7", "1.8")
}
extra["JDK_18"] = jdkPath("1.8")
extra["JDK_9"] = jdkPath("9")
extra["JDK_10"] = jdkPath("10")
extra["JDK_11"] = jdkPath("11")
extra["JDK_15"] = jdkPath("15")
// allow opening the project without setting up all env variables (see KT-26413)
if (!kotlinBuildProperties.isInIdeaSync) {
checkJDK()
}
fun checkJDK() {
val missingEnvVars = JdkMajorVersion.values()
.filter { it.isMandatory() && extra[it.name] == jdkNotFoundConst }
.mapTo(ArrayList()) { it.name }
if (missingEnvVars.isNotEmpty()) {
throw GradleException("Required environment variables are missing: ${missingEnvVars.joinToString()}")
}
}
rootProject.apply {
from(rootProject.file("gradle/versions.gradle.kts"))
from(rootProject.file("gradle/report.gradle.kts"))
@@ -423,8 +384,6 @@ fun Task.listConfigurationContents(configName: String) {
}
}
val defaultJvmTarget = "1.8"
val defaultJavaHome = jdkPath(if (Platform[203].orHigher()) "11" else defaultJvmTarget)
val ignoreTestFailures by extra(project.kotlinBuildProperties.ignoreTestFailures)
allprojects {
@@ -470,17 +429,16 @@ allprojects {
}
}
jvmTarget = defaultJvmTarget
javaHome = defaultJavaHome
// There are problems with common build dir:
// - some tests (in particular js and binary-compatibility-validator depend on the fixed (default) location
// - idea seems unable to exclude common buildDir from indexing
// therefore it is disabled by default
// buildDir = File(commonBuildDir, project.name)
configureJvmProject(javaHome!!, jvmTarget!!)
project.configureJvmDefaultToolchain()
plugins.withId("java-base") {
project.configureShadowJarSubstitutionInCompileClasspath()
}
val commonCompilerArgs = listOfNotNull(
"-Xopt-in=kotlin.RequiresOptIn",
@@ -581,11 +539,6 @@ allprojects {
apply(from = "$rootDir/gradle/cacheRedirector.gradle.kts")
afterEvaluate {
if (javaHome != defaultJavaHome || jvmTarget != defaultJvmTarget) {
logger.info("configuring project $name to compile to the target jvm version $jvmTarget using jdk: $javaHome")
configureJvmProject(javaHome!!, jvmTarget!!)
} // else we will actually fail during the first task execution. We could not fail before configuration is done due to impact on import in IDE
fun File.toProjectRootRelativePathOrSelf() = (relativeToOrNull(rootDir)?.takeUnless { it.startsWith("..") } ?: this).path
fun FileCollection.printClassPath(role: String) =
@@ -1105,66 +1058,6 @@ configure<IdeaModel> {
}
}
fun jdkPathOrNull(version: String): String? {
val jdkName = "JDK_${version.replace(".", "")}"
val jdkMajorVersion = JdkMajorVersion.valueOf(jdkName)
return configuredJdks.find { it.majorVersion == jdkMajorVersion }?.homeDir?.canonicalPath
}
fun jdkPath(version: String, vararg replacementVersions: String): String {
return jdkPathOrNull(version) ?: run {
replacementVersions.asSequence().map { jdkPathOrNull(it) }.find { it != null }
} ?: jdkNotFoundConst
}
fun Project.configureJvmProject(javaHome: String, javaVersion: String) {
val currentJavaHome = File(System.getProperty("java.home")!!).canonicalPath
val shouldFork = !currentJavaHome.startsWith(File(javaHome).canonicalPath)
tasks.withType<JavaCompile> {
if (name != "compileJava9Java") {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
options.isFork = shouldFork
options.forkOptions.javaHome = file(javaHome)
options.compilerArgs.add("-proc:none")
options.encoding = "UTF-8"
}
}
tasks.withType<KotlinCompile> {
kotlinOptions.jdkHome = javaHome
kotlinOptions.jvmTarget = javaVersion
kotlinOptions.freeCompilerArgs += "-Xjvm-default=compatibility"
}
tasks.withType<Test> {
executable = File(javaHome, "bin/java").canonicalPath
}
plugins.withId("java-base") {
configureShadowJarSubstitutionInCompileClasspath()
}
}
fun Project.configureShadowJarSubstitutionInCompileClasspath() {
val substitutionMap = mapOf(":kotlin-reflect" to ":kotlin-reflect-api")
fun configureSubstitution(substitution: DependencySubstitution) {
val requestedProject = (substitution.requested as? ProjectComponentSelector)?.projectPath ?: return
val replacementProject = substitutionMap[requestedProject] ?: return
substitution.useTarget(project(replacementProject), "Non-default shadow jars should not be used in compile classpath")
}
sourceSets.all {
for (configName in listOf(compileOnlyConfigurationName, compileClasspathConfigurationName)) {
configurations.getByName(configName).resolutionStrategy.dependencySubstitution {
all(::configureSubstitution)
}
}
}
}
tasks.register("findShadowJarsInClasspath") {
doLast {
fun Collection<File>.printSorted(indent: String = " ") {
@@ -4,32 +4,36 @@
*/
import groovy.lang.Closure
import org.gradle.api.JavaVersion
import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.*
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.jvm.inspection.JvmVersionDetector
import org.gradle.jvm.toolchain.JavaLauncher
import org.gradle.kotlin.dsl.property
import proguard.ClassSpecification
import java.io.File
import javax.inject.Inject
@CacheableTask
open class CacheableProguardTask @Inject constructor(
private val jvmVersionDetector: JvmVersionDetector
) : proguard.gradle.ProGuardTask() {
open class CacheableProguardTask : proguard.gradle.ProGuardTask() {
@Internal
var jdkHome: File? = null
@get:Internal
val javaLauncher: Property<JavaLauncher> = project.objects.property()
@get:Internal
val jdkHomePath: Provider<File> = javaLauncher.map { it.metadata.installationPath.asFile }
@get:Optional
@get:Input
internal val jdkMajorVersion: String?
get() = jdkHome?.let { jvmVersionDetector.getJavaVersion(Jvm.forHome(jdkHome)) }?.majorVersion
internal val jdkMajorVersion: Provider<JavaVersion> = javaLauncher.map {
JavaVersion.toVersion(it.metadata.languageVersion.toString())
}
@CompileClasspath
override fun getLibraryJarFileCollection(): FileCollection = super.getLibraryJarFileCollection().filter { libraryFile ->
jdkHome?.let { !libraryFile.absoluteFile.startsWith(it.absoluteFile) } ?: true
}
override fun getLibraryJarFileCollection(): FileCollection = super.getLibraryJarFileCollection()
.filter { libraryFile ->
jdkHomePath.orNull?.let { !libraryFile.absoluteFile.startsWith(it.absoluteFile) } ?: true
}
@InputFiles
@PathSensitive(PathSensitivity.RELATIVE)
+86
View File
@@ -0,0 +1,86 @@
@file:JvmName("JvmToolchain")
import org.gradle.api.Project
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.jvm.toolchain.*
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
enum class JdkMajorVersion(
val majorVersion: Int,
private val mandatory: Boolean = true
) {
JDK_1_6(6),
JDK_1_7(7),
JDK_1_8(8),
JDK_9(9),
JDK_10(10, false),
JDK_11(11, false),
JDK_15(15, false),
JDK_16(16, false);
fun isMandatory(): Boolean = mandatory
}
fun Project.configureJvmDefaultToolchain() {
configureJvmToolchain(JdkMajorVersion.JDK_1_8)
}
fun Project.configureJvmToolchain(
jdkVersion: JdkMajorVersion
) {
plugins.withId("org.jetbrains.kotlin.jvm") {
val kotlinExtension = extensions.getByType<KotlinTopLevelExtension>()
kotlinExtension.jvmToolchain {
(this as JavaToolchainSpec).languageVersion
.set(JavaLanguageVersion.of(jdkVersion.majorVersion))
}
tasks
.matching { it.name != "compileJava9Java" && it is JavaCompile }
.configureEach {
with(this as JavaCompile) {
options.compilerArgs.add("-proc:none")
options.encoding = "UTF-8"
}
}
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions.freeCompilerArgs += "-Xjvm-default=compatibility"
}
}
}
fun Project.updateJvmTarget(
jvmTarget: String
) {
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions.jvmTarget = jvmTarget
}
tasks.withType<JavaCompile>().configureEach {
sourceCompatibility = jvmTarget
targetCompatibility = jvmTarget
}
}
fun Project.getToolchainCompilerFor(
jdkVersion: JdkMajorVersion
): Provider<JavaCompiler> {
val service = project.extensions.getByType<JavaToolchainService>()
return service.compilerFor {
this.languageVersion.set(JavaLanguageVersion.of(jdkVersion.majorVersion))
}
}
fun Project.getToolchainLauncherFor(
jdkVersion: JdkMajorVersion
): Provider<JavaLauncher> {
val service = project.extensions.getByType<JavaToolchainService>()
return service.launcherFor {
this.languageVersion.set(JavaLanguageVersion.of(jdkVersion.majorVersion))
}
}
@@ -0,0 +1,75 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:JvmName("LibrariesCommon")
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.provideDelegate
import org.gradle.kotlin.dsl.withType
import org.gradle.process.CommandLineArgumentProvider
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@JvmOverloads
fun Project.configureJava9Compilation(
moduleName: String,
moduleOutputs: Collection<FileCollection> = setOf(sourceSets["main"].output)
) {
configurations["java9CompileClasspath"].extendsFrom(configurations["compileClasspath"])
tasks.named("compileJava9Java", JavaCompile::class.java) {
dependsOn(moduleOutputs)
javaCompiler.set(getToolchainCompilerFor(JdkMajorVersion.JDK_9))
targetCompatibility = JavaVersion.VERSION_1_9.toString()
sourceCompatibility = JavaVersion.VERSION_1_9.toString()
// module-info.java should be in java9 source set by convention
val java9SourceSet = sourceSets["java9"].java
destinationDir = file("${java9SourceSet.outputDir}/META-INF/versions/9")
options.sourcepath = files(java9SourceSet.srcDirs)
val compileClasspath = configurations["java9CompileClasspath"]
val moduleFiles = objects.fileCollection().from(moduleOutputs)
val modulePath = compileClasspath.filter { it !in moduleFiles.files }
classpath = objects.fileCollection().from()
options.compilerArgumentProviders.add(
Java9AdditionalArgumentsProvider(
moduleName,
moduleFiles,
modulePath
)
)
}
}
private class Java9AdditionalArgumentsProvider(
private val moduleName: String,
private val moduleFiles: FileCollection,
private val modulePath: FileCollection
) : CommandLineArgumentProvider {
override fun asArguments(): Iterable<String> = listOf(
"--module-path", modulePath.asPath,
"--patch-module", "$moduleName=${moduleFiles.asPath}",
"-Xlint:-requires-transitive-automatic" // suppress automatic module transitive dependencies in kotlin.test
)
}
fun Project.disableDeprecatedJvmTargetWarning() {
if (!kotlinBuildProperties.disableWerror) {
val tasksWithWarnings: List<String> by rootProject.extra
tasks.withType<KotlinCompile>().configureEach {
if (!tasksWithWarnings.contains(path)) {
kotlinOptions {
allWarningsAsErrors = true
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
}
}
}
}
}
+9 -5
View File
@@ -13,6 +13,8 @@ import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.internal.jvm.Jvm
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.accessors.runtime.addDependencyTo
import org.gradle.kotlin.dsl.closureOf
import org.gradle.kotlin.dsl.exclude
@@ -287,14 +289,16 @@ fun Project.firstFromJavaHomeThatExists(vararg paths: String, jdkHome: File = Fi
fun Project.toolsJarApi(): Any =
if (kotlinBuildProperties.isInJpsBuildIdeaSync)
files(toolsJarFile() ?: error("tools.jar is not found!"))
toolsJar()
else
dependencies.project(":dependencies:tools-jar-api")
fun Project.toolsJar(): FileCollection = files(toolsJarFile() ?: error("tools.jar is not found!"))
fun Project.toolsJarFile(jdkHome: File = File(this.property("JDK_18") as String)): File? =
firstFromJavaHomeThatExists("lib/tools.jar", jdkHome = jdkHome)
fun Project.toolsJar(): FileCollection = files(
getToolchainLauncherFor(JdkMajorVersion.JDK_1_8)
.map {
Jvm.forHome(it.metadata.installationPath.asFile).toolsJar ?: throw GradleException("tools.jar not found!")
}
)
val compilerManifestClassPath
get() = "annotations-13.0.jar kotlin-stdlib.jar kotlin-reflect.jar kotlin-script-runtime.jar trove4j.jar"
+20
View File
@@ -2,6 +2,8 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.Project
import org.gradle.api.artifacts.DependencySubstitution
import org.gradle.api.artifacts.component.ProjectComponentSelector
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
@@ -80,6 +82,24 @@ private fun Project.compilerShadowJar(taskName: String, body: ShadowJar.() -> Un
}
}
fun Project.configureShadowJarSubstitutionInCompileClasspath() {
val substitutionMap = mapOf(":kotlin-reflect" to ":kotlin-reflect-api")
fun configureSubstitution(substitution: DependencySubstitution) {
val requestedProject = (substitution.requested as? ProjectComponentSelector)?.projectPath ?: return
val replacementProject = substitutionMap[requestedProject] ?: return
substitution.useTarget(project(replacementProject), "Non-default shadow jars should not be used in compile classpath")
}
sourceSets.all {
for (configName in listOf(compileOnlyConfigurationName, compileClasspathConfigurationName)) {
configurations.getByName(configName).resolutionStrategy.dependencySubstitution {
all(::configureSubstitution)
}
}
}
}
fun Project.embeddableCompiler(taskName: String = "embeddable", body: ShadowJar.() -> Unit = {}): TaskProvider<out ShadowJar> =
compilerShadowJar(taskName) {
configureEmbeddableCompilerRelocation()
-198
View File
@@ -1,198 +0,0 @@
@file:Suppress("unused") // usages in build scripts are not tracked properly
import net.rubygrapefruit.platform.Native
import net.rubygrapefruit.platform.WindowsRegistry
import org.gradle.api.GradleException
import org.gradle.api.Project
import java.nio.file.Paths
import java.io.File
import net.rubygrapefruit.platform.WindowsRegistry.Key.HKEY_LOCAL_MACHINE
import org.gradle.internal.os.OperatingSystem
enum class JdkMajorVersion(private val mandatory: Boolean = true) {
JDK_16, JDK_17, JDK_18, JDK_9, JDK_10(false), JDK_11(false), /*15.0*/JDK_15(false);
fun isMandatory(): Boolean = mandatory
}
val jdkAlternativeVarNames = mapOf(JdkMajorVersion.JDK_9 to listOf("JDK_19"), JdkMajorVersion.JDK_15 to listOf("JDK_15_0"))
data class JdkId(val explicit: Boolean, val majorVersion: JdkMajorVersion, var version: String, var homeDir: File)
fun Project.getConfiguredJdks(): List<JdkId> {
val res = arrayListOf<JdkId>()
for (jdkMajorVersion in JdkMajorVersion.values()) {
val explicitJdkEnvVal = findProperty(jdkMajorVersion.name)?.toString()
?: System.getenv(jdkMajorVersion.name)
?: jdkAlternativeVarNames[jdkMajorVersion]?.mapNotNull { System.getenv(it) }?.firstOrNull()
?: continue
val explicitJdk = Paths.get(explicitJdkEnvVal).toRealPath().toFile()
if (!explicitJdk.isDirectory) {
throw GradleException("Invalid environment value $jdkMajorVersion: $explicitJdkEnvVal, expecting JDK home path")
}
res.add(JdkId(true, jdkMajorVersion, "X", explicitJdk))
}
if (res.size < JdkMajorVersion.values().size) {
res.discoverJdks(this)
}
return res
}
// see JEP 223
private val javaMajorVersionRegex = Regex("""(?:1\.)?(\d+).*""")
private val javaVersionRegex = Regex("""(?:1\.)?(\d+)(\.\d+)?([+-_]\w+){0,3}""")
fun MutableCollection<JdkId>.addIfBetter(project: Project, version: String, id: String, homeDir: File): Boolean {
val matchString = javaMajorVersionRegex.matchEntire(version)?.groupValues?.get(1)
val majorJdkVersion = when (matchString) {
"6" -> JdkMajorVersion.JDK_16
"7" -> JdkMajorVersion.JDK_17
"8" -> JdkMajorVersion.JDK_18
"9" -> JdkMajorVersion.JDK_9
else -> {
project.logger.info("Cannot recognize version string '$version' (found version '$matchString')")
return false
}
}
val prev = find { it.majorVersion == majorJdkVersion }
if (prev == null) {
add(JdkId(false, majorJdkVersion, version, homeDir))
return true
}
if (prev.explicit) return false
val versionsComparisonRes = compareVersions(prev.version, version)
if (versionsComparisonRes < 0 || (versionsComparisonRes == 0 && id.contains("64"))) { // prefer 64-bit
prev.version = version
prev.homeDir = homeDir
return true
}
return false
}
private fun compareVersions(left: String, right: String): Int {
if (left == right) return 0
fun MatchResult.extractNumVer(): List<Int> =
groups.drop(2).map {
it?.value?.filter { it in '0'..'9' }?.toIntOrNull() ?: 0
}
val lmi = (javaVersionRegex.matchEntire(left)?.extractNumVer() ?: emptyList()).iterator()
val rmi = (javaVersionRegex.matchEntire(right)?.extractNumVer() ?: emptyList()).iterator()
while (lmi.hasNext() && rmi.hasNext()) {
val l = lmi.next()
val r = rmi.next()
when {
l < r -> return -1
l > r -> return 1
}
}
return when {
rmi.hasNext() -> -1
lmi.hasNext() -> 1
else -> 0
}
}
fun MutableCollection<JdkId>.discoverJdks(project: Project) {
val os = OperatingSystem.current()
when {
os.isWindows -> discoverJdksOnWindows(project)
os.isMacOsX -> discoverJdksOnMacOS(project)
else -> discoverJdksOnUnix(project)
}
}
private val macOsJavaHomeOutRegexes =
listOf(
Regex("""\s+(\S+),\s+(\S+):\s+".*?"\s+(.+)"""),
Regex("""\s+(\S+)\s+\((.*?)\):\s+(.+)"""),
Regex("""\s+(\S+)\s+\((.*?)\)\s+"[^"]*"\s+-\s+"[^"]*"\s(.+)"""),
Regex("""\s+(\S+)\s+\((.+)\)\s+".+"\s+-\s+".+"\s+(.+)"""))
fun MutableCollection<JdkId>.discoverJdksOnMacOS(project: Project) {
val procBuilder = ProcessBuilder("/usr/libexec/java_home", "-V").redirectErrorStream(true)
val process = procBuilder.start()
val retCode = process.waitFor()
if (retCode != 0) throw GradleException("Unable to run 'java_home', return code $retCode")
process.inputStream.bufferedReader().forEachLine { line ->
for (rex in macOsJavaHomeOutRegexes) {
val matchResult = rex.matchEntire(line)
if (matchResult != null) {
val jdkHomeDir = File(matchResult.groupValues[3])
// Filter out JRE installed at /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
// and shown by the java_home tool
if (!jdkHomeDir.path.contains("JavaAppletPlugin.plugin")) {
addIfBetter(project, matchResult.groupValues[1], matchResult.groupValues[0], jdkHomeDir)
break
}
}
}
}
}
private val unixConventionalJdkLocations = listOf(
"/usr/lib/jvm", // *deb, Arch
"/opt", // *rpm, Gentoo, HP/UX
"/usr/lib", // Slackware 32
"/usr/lib64", // Slackware 64
"/usr/local", // OpenBSD, FreeBSD
"/usr/pkg/java", // NetBSD
"/usr/jdk/instances") // Solaris
private val unixConventionalJdkDirRex = Regex("jdk|jre|java|zulu")
fun MutableCollection<JdkId>.discoverJdksOnUnix(project: Project) {
for (loc in unixConventionalJdkLocations) {
val installedJdks = File(loc).listFiles { dir ->
dir.isDirectory &&
unixConventionalJdkDirRex.containsMatchIn(dir.name) &&
fileFrom(dir, "bin", "java").isFile
} ?: continue
for (dir in installedJdks) {
val versionMatch = javaVersionRegex.find(dir.name)
if (versionMatch == null) {
project.logger.info("Unable to extract version from possible JDK dir: $dir")
}
else {
addIfBetter(project, versionMatch.value, dir.name, dir)
}
}
}
}
private val windowsConventionalJdkRegistryPaths = listOf(
"SOFTWARE\\JavaSoft\\Java Development Kit",
"SOFTWARE\\Wow6432Node\\JavaSoft\\Java Development Kit",
"SOFTWARE\\JavaSoft\\JDK",
"SOFTWARE\\Wow6432Node\\JavaSoft\\JDK")
fun MutableCollection<JdkId>.discoverJdksOnWindows(project: Project) {
val registry = Native.get(WindowsRegistry::class.java)
for (regPath in windowsConventionalJdkRegistryPaths) {
val jdkKeys = try {
registry.getSubkeys(HKEY_LOCAL_MACHINE, regPath)
} catch (e: RuntimeException) {
// ignore missing nodes
continue
}
for (jdkKey in jdkKeys) {
try {
val javaHome = registry.getStringValue(HKEY_LOCAL_MACHINE, regPath + "\\" + jdkKey, "JavaHome")
val versionMatch = javaVersionRegex.find(jdkKey)
if (versionMatch == null) {
project.logger.info("Unable to extract version from possible JDK location: $javaHome ($jdkKey)")
}
else {
javaHome.takeIf { it.isNotEmpty() }
?.let { File(it) }
?.takeIf { it.isDirectory && fileFrom(it, "bin", "java.exe").isFile }
?.let {
addIfBetter(project, versionMatch.value, jdkKey, it)
}
}
}
catch (e: RuntimeException) {
// Ignore
}
}
}
}
+8 -8
View File
@@ -5,8 +5,13 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
// This module does not apply Kotlin plugin, so we are setting toolchain via
// java extension
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(6))
}
}
val kotlinVersion: String by rootProject.extra
@@ -19,15 +24,10 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.named<ProcessResources>("processResources") {
val kotlinVersionLocal = kotlinVersion
inputs.property("compilerVersion", kotlinVersionLocal)
filesMatching("META-INF/compiler.version") {
filter<ReplaceTokens>("tokens" to mapOf("snapshot" to kotlinVersionLocal))
}
}
}
@@ -44,7 +44,7 @@ projectTest("testJvmICWithJdk11", parallel = true) {
filter {
includeTestsMatching("org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunnerTestGenerated*")
}
executable = "${rootProject.extra["JDK_11"]}/bin/java"
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_11))
}
testsJar()
+1 -1
View File
@@ -3,7 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
dependencies {
compile(kotlinStdlib())
+32 -30
View File
@@ -1,5 +1,3 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm")
id("jps-compatible")
@@ -28,40 +26,45 @@ sourceSets {
}
fun Project.codegenTest(
target: Int, jvm: Int,
jdk: String = "JDK_${if (jvm <= 8) "1" else ""}$jvm",
body: Test.() -> Unit
) {
codegenTest(target, jvm.toString(), jdk, body = body)
}
fun Project.codegenTest(
target: Int, jvm: String, jdk: String,
target: Int,
jdk: JdkMajorVersion,
jvm: String = jdk.majorVersion.toString(),
targetInTestClass: String = "$target",
body: Test.() -> Unit
): TaskProvider<Test> = projectTest("codegenTarget${targetInTestClass}Jvm${jvm}Test", jUnit5Enabled = true) {
body: Test.() -> Unit = {}
): TaskProvider<Test> = projectTest(
taskName = "codegenTarget${targetInTestClass}Jvm${jvm}Test",
jUnit5Enabled = true
) {
dependsOn(":dist")
workingDir = rootDir
val testName = "JvmTarget${targetInTestClass}OnJvm${jvm}"
filter.includeTestsMatching("org.jetbrains.kotlin.codegen.jdk.$testName")
javaLauncher.set(project.getToolchainLauncherFor(jdk))
systemProperty("kotlin.test.default.jvm.target", "${if (target <= 8) "1." else ""}$target")
body()
doFirst {
val jdkPath = project.findProperty(jdk) ?: error("$jdk is not optional to run this test")
executable = "$jdkPath/bin/java"
println("Running tests with $target target and $executable")
logger.warn("Running tests with $target target and ${javaLauncher.get().metadata.installationPath.asFile}")
}
group = "verification"
}
codegenTest(target = 6, jvm = 6, jdk = "JDK_18") {
codegenTest(
target = 6,
jdk = JdkMajorVersion.JDK_1_8,
jvm = JdkMajorVersion.JDK_1_6.majorVersion.toString()
) {
dependsOn(testJvm6ServerRuntime)
doFirst {
systemProperty("kotlin.test.default.jvm.target", "1.6")
systemProperty("kotlin.test.java.compilation.target", "1.6")
systemProperty(
"JDK_16",
project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_6).get().metadata.installationPath.asFile.absolutePath
)
val port = project.findProperty("kotlin.compiler.codegen.tests.port") ?: "5100"
systemProperty("kotlin.test.box.in.separate.process.port", port)
@@ -70,37 +73,36 @@ codegenTest(target = 6, jvm = 6, jdk = "JDK_18") {
}
//JDK 8
codegenTest(target = 6, jvm = 8) {}
codegenTest(target = 6, jdk = JdkMajorVersion.JDK_1_8)
// This is default one and is executed in default build configuration
codegenTest(target = 8, jvm = 8) {}
codegenTest(target = 8, jdk = JdkMajorVersion.JDK_1_8)
//JDK 11
codegenTest(target = 6, jvm = 11) {}
codegenTest(target = 6, jdk = JdkMajorVersion.JDK_11)
codegenTest(target = 8, jvm = 11) {}
codegenTest(target = 8, jdk = JdkMajorVersion.JDK_11)
codegenTest(target = 11, jvm = 11) {}
codegenTest(target = 11, jdk = JdkMajorVersion.JDK_11)
//JDK 15
codegenTest(target = 6, jvm = 15) {}
codegenTest(target = 6, jdk = JdkMajorVersion.JDK_15)
codegenTest(target = 8, jvm = 15) {}
codegenTest(target = 8, jdk = JdkMajorVersion.JDK_15)
codegenTest(target = 15, jvm = 15) {
codegenTest(target = 15, jdk = JdkMajorVersion.JDK_15) {
systemProperty("kotlin.test.box.d8.disable", true)
}
//..also add this two tasks to build after adding fresh jdks to build agents
val mostRecentJdk = JdkMajorVersion.values().last().name
val mostRecentJdk = JdkMajorVersion.values().last()
//LAST JDK from JdkMajorVersion available on machine
codegenTest(target = 6, jvm = "Last", jdk = mostRecentJdk) {}
codegenTest(target = 8, jvm = "Last", jdk = mostRecentJdk) {}
codegenTest(target = 6, jvm = "Last", jdk = mostRecentJdk)
codegenTest(target = 8, jvm = "Last", jdk = mostRecentJdk)
codegenTest(
mostRecentJdk.substringAfter('_').toInt(),
target = mostRecentJdk.majorVersion,
targetInTestClass = "Last",
jvm = "Last",
jdk = mostRecentJdk
@@ -37,9 +37,11 @@ object SeparateJavaProcessHelper {
private fun initJdkProcess() {
println("Configuring JDK6 Test server...")
val jdkPath = System.getenv("JDK_16") ?: error("JDK_16 is not optional to run this test")
val jdkPath = System.getProperty("JDK_16") ?: error("JDK_16 is not optional to run this test")
val executable = File(jdkPath, "bin/java").canonicalPath
assert(File(executable).exists()) { "Not a JDK path: $jdkPath"}
val main = "org.jetbrains.kotlin.test.clientserver.TestProcessServer"
val classpath =
System.getProperty("kotlin.test.box.in.separate.process.server.classpath") ?: System.getProperty("java.class.path")
-1
View File
@@ -23,7 +23,6 @@ sourceSets {
}
projectTest(parallel = true) {
executable = "${rootProject.extra["JDK_18"]!!}/bin/java"
dependsOn(":dist")
workingDir = rootDir
systemProperty("kotlin.test.script.classpath", testSourceSet.output.classesDirs.joinToString(File.pathSeparator))
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
api(project(":core:compiler.common"))
@@ -15,11 +14,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(project(":core:util.runtime"))
@@ -17,11 +16,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(project(":kotlin-annotations-jvm"))
@@ -21,11 +20,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+15 -14
View File
@@ -1,10 +1,24 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.UsesKotlinJavaToolchain
plugins {
kotlin("jvm")
id("jps-compatible")
}
// Only compilation tasks should use JDK 1.6
project.disableDeprecatedJvmTargetWarning()
tasks
.matching { it.name == "compileKotlin" && it is UsesKotlinJavaToolchain }
.configureEach {
(this as UsesKotlinJavaToolchain).kotlinJavaToolchain.toolchain.use(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_6))
}
tasks
.matching { it.name == "compileJava" && it is JavaCompile }
.configureEach {
(this as JavaCompile).javaCompiler.set(project.getToolchainCompilerFor(JdkMajorVersion.JDK_1_6))
}
dependencies {
compileOnly(project(":core:util.runtime"))
compileOnly(project(":core:descriptors"))
@@ -23,19 +37,6 @@ sourceSets {
"test" { projectDefault() }
}
val compileJava by tasks.getting(JavaCompile::class) {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
val compileKotlin by tasks.getting(KotlinCompile::class) {
kotlinOptions {
jvmTarget = "1.6"
jdkHome = rootProject.extra["JDK_16"] as String
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
}
}
val generateTests by generator("org.jetbrains.kotlin.generators.tests.GenerateRuntimeDescriptorTestsKt")
projectTest(parallel = true) {
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(project(":core:compiler.common"))
@@ -18,11 +17,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
api(project(":core:metadata.jvm"))
@@ -17,11 +16,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
api(project(":core:compiler.common"))
@@ -16,11 +15,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(project(":core:metadata"))
@@ -19,11 +18,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
api(project(":core:metadata"))
@@ -15,11 +14,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(protobufLite())
@@ -16,11 +15,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+1 -7
View File
@@ -3,8 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compileOnly(kotlinStdlib())
@@ -15,11 +14,6 @@ sourceSets {
"test" {}
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
+2 -3
View File
@@ -5,6 +5,7 @@ import java.util.zip.ZipFile
plugins {
base
`java-base`
}
val runtimeElements by configurations.creating {
@@ -15,10 +16,8 @@ val runtimeElements by configurations.creating {
}
}
val JDK_18: String by rootProject.extra
val toolsJarStubs by tasks.registering {
val toolsJarFile = toolsJarFile(jdkHome = File(JDK_18)) ?: error("Couldn't find tools.jar in $JDK_18")
val toolsJarFile = toolsJar().singleFile
inputs.file(toolsJarFile)
val outDir = buildDir.resolve(name)
+4
View File
@@ -2,6 +2,7 @@ org.gradle.jvmargs=-Duser.country=US -Dkotlin.daemon.jvm.options=-Xmx2200m -Dfil
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.java.installations.fromEnv=JDK_16,JDK_17,JDK_18,JDK_9,JDK_10,JDK_11,JDK_15
cacheRedirectorEnabled=true
defaultSnapshotVersion=1.5.255-SNAPSHOT
@@ -24,6 +25,9 @@ kotlin.build.publishing.attempts=20
## The following properties can be added to your local.properties file to customize the build:
# Enable when https://youtrack.jetbrains.com/issue/KT-47520 will be fixed
kotlin.jvm.target.validation.mode=ignore
#jpsBuild=true
#cidrPluginsEnabled=true
#idea.fir.plugin=true
-79
View File
@@ -1,84 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
ext.configureJavaOnlyJvm6Project = { Project project ->
project.tasks.withType(JavaCompile) {
sourceCompatibility = 1.6
targetCompatibility = 1.6
options.fork = true
options.forkOptions.javaHome = file(JDK_16)
}
}
List<String> tasksWithWarnings = (List<String>) rootProject.ext.get("tasksWithWarnings")
ext.configureJvm6Project = { Project project ->
project.configure(project) {
configurations {
sources
}
project.ext.jvmTarget = "1.6"
project.ext.javaHome = JDK_16
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.kotlin
}
configureJavaOnlyJvm6Project(project)
tasks.withType(project.compileKotlin.class) {
kotlinOptions.jdkHome = JDK_16
kotlinOptions.jvmTarget = "1.6"
}
test {
executable = "$JDK_16/bin/java"
}
}
if (!BuildPropertiesExtKt.getDisableWerror(project.kotlinBuildProperties)) {
project.tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinCompile.class) { task ->
if (!tasksWithWarnings.contains(task.path)) {
task.kotlinOptions {
allWarningsAsErrors = true
freeCompilerArgs += "-Xsuppress-deprecated-jvm-target-warning"
}
}
}
}
}
ext.compileJava9Sources = { Project project, String moduleName, Collection<FileCollection> moduleOutputs = [project.sourceSets.main.output] ->
// module-info.java should be in java9 source set by convention
SourceDirectorySet java9SourceSet = project.sourceSets.java9.java
project.configurations.java9CompileClasspath.extendsFrom(project.configurations.compileClasspath)
project.tasks.getByName("compileJava9Java").configure { JavaCompile it ->
dependsOn(moduleOutputs)
it.sourceCompatibility = 1.9
it.targetCompatibility = 1.9
it.destinationDir = file("${java9SourceSet.outputDir}/META-INF/versions/9")
it.options.fork = true
it.options.forkOptions.javaHome = file(JDK_9)
it.options.sourcepath = files(java9SourceSet.srcDirs)
def compileClasspath = project.configurations.java9CompileClasspath
def objects = project.objects
doFirst {
def moduleFiles = objects.fileCollection().from(*moduleOutputs)
def modulePath = compileClasspath.filter { !(it in moduleFiles.files) }
options.compilerArgs = [
'--module-path', modulePath.asPath,
'--patch-module', "$moduleName=${moduleFiles.asPath}",
'-Xlint:-requires-transitive-automatic' // suppress automatic module transitive dependencies in kotlin.test
]
classpath = objects.fileCollection().from()
}
}
}
ext.manifestAttributes = { Manifest manifest, Project project, String component = null, boolean multiRelease = false ->
project.configure(manifest) {
attributes \
@@ -2,7 +2,7 @@ description = 'Kotlin Test Annotations Common'
apply plugin: 'kotlin-platform-common'
jvmTarget = "1.6"
JvmToolchain.updateJvmTarget(project, "1.6")
dependencies {
compile kotlinStdlib("common")
+1 -1
View File
@@ -2,7 +2,7 @@ description = 'Kotlin Test Common'
apply plugin: 'kotlin-platform-common'
jvmTarget = "1.6"
JvmToolchain.updateJvmTarget(project, "1.6")
dependencies {
compile kotlinStdlib("common")
+3 -2
View File
@@ -2,7 +2,8 @@ description = 'Kotlin Test JUnit'
apply plugin: 'kotlin-platform-jvm'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)
@@ -47,5 +48,5 @@ compileTestKotlin {
configureJvmIrBackend(project)
if (includeJava9) {
compileJava9Sources(project, 'kotlin.test.junit')
LibrariesCommon.configureJava9Compilation(project, 'kotlin.test.junit')
}
+1 -11
View File
@@ -2,10 +2,6 @@ description = 'Kotlin Test JUnit 5'
apply plugin: 'kotlin-platform-jvm'
configureJvm6Project(project)
ext.javaHome = JDK_18
ext.jvmTarget = "1.8"
def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)
sourceSets {
@@ -34,11 +30,6 @@ jar {
configureSourcesJar()
configureJavadocJar()
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = JDK_18
kotlinOptions.jvmTarget = 1.8
}
compileKotlin {
kotlinOptions.freeCompilerArgs = [
"-Xallow-kotlin-package",
@@ -57,10 +48,9 @@ compileTestKotlin {
configureJvmIrBackend(project)
if (includeJava9) {
compileJava9Sources(project, 'kotlin.test.junit5')
LibrariesCommon.configureJava9Compilation(project, 'kotlin.test.junit5')
}
test {
useJUnitPlatform()
executable = "$JDK_18/bin/java"
}
+3 -3
View File
@@ -4,8 +4,8 @@ apply plugin: 'kotlin-platform-jvm'
archivesBaseName = 'kotlin-test'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)
@@ -62,5 +62,5 @@ compileTestKotlin {
configureJvmIrBackend(project)
if (includeJava9) {
compileJava9Sources(project, 'kotlin.test')
LibrariesCommon.configureJava9Compilation(project, 'kotlin.test')
}
+4 -3
View File
@@ -2,8 +2,9 @@ description = 'Kotlin Test TestNG'
apply plugin: 'kotlin-platform-jvm'
configureJvm6Project(project)
ext.javaHome = JDK_17
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_7)
JvmToolchain.updateJvmTarget(project, "1.6")
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)
@@ -50,7 +51,7 @@ compileTestKotlin {
configureJvmIrBackend(project)
if (includeJava9) {
compileJava9Sources(project, 'kotlin.test.testng')
LibrariesCommon.configureJava9Compilation(project, 'kotlin.test.testng')
}
test {
+1 -2
View File
@@ -11,8 +11,7 @@ pill {
variant = PillExtension.Variant.FULL
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
sourceSets {
"main" { projectDefault() }
@@ -26,8 +26,7 @@ group = "org.jetbrains.kotlinx"
val deployVersion = findProperty("kotlinxMetadataDeployVersion") as String?
version = deployVersion ?: "0.1-SNAPSHOT"
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
sourceSets {
"main" { projectDefault() }
+5 -3
View File
@@ -2,7 +2,8 @@ description = ''
apply plugin: 'kotlin'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
def includeJava9 = BuildPropertiesExtKt.getIncludeJava9(project.kotlinBuildProperties)
@@ -32,8 +33,9 @@ dependencies {
}
if (includeJava9) {
compileJava9Sources(
project, 'kotlin.reflect',
LibrariesCommon.configureJava9Compilation(
project,
'kotlin.reflect',
[sourceSets.main.output, configurations.compileOnly.filter {
!it.name.contains("kotlin-stdlib")
}]
+17 -5
View File
@@ -20,9 +20,11 @@ plugins {
java
}
val JDK_16: String by rootProject.extra
callGroovy("configureJavaOnlyJvm6Project", project)
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(6))
}
}
publish()
@@ -150,9 +152,19 @@ val proguard by task<CacheableProguardTask> {
injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars)
outjars(proguardOutput)
jdkHome = File(JDK_16)
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_6))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardDeps)
libraryjars(firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!))
libraryjars(
project.files(
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/rt.jar",
"../Classes/classes.jar",
jdkHome = it.metadata.installationPath.asFile
)
}
)
)
configuration("$core/reflection.jvm/reflection.pro")
}
+1 -1
View File
@@ -3,7 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
dependencies {
compile(kotlinStdlib())
@@ -3,7 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
configurations.implementation {
/**
@@ -3,7 +3,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
dependencies {
compile(kotlinStdlib())
@@ -4,8 +4,6 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.8"
dependencies {
compile(project(":kotlin-script-runtime"))
compile(kotlinStdlib())
+1 -7
View File
@@ -3,9 +3,7 @@ plugins {
id("jps-compatible")
}
val JDK_16: String by project
jvmTarget = "1.6"
javaHome = JDK_16
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
dependencies {
compile(project(":kotlin-script-runtime"))
@@ -26,10 +24,6 @@ tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
)
}
tasks.withType<Test> {
executable = "$JDK_16/bin/java"
}
publish()
runtimeJar()
+1 -1
View File
@@ -4,7 +4,7 @@ apply plugin: 'kotlin-platform-common'
configurePublishing(project)
jvmTarget = "1.6"
JvmToolchain.updateJvmTarget(project, "1.6")
def commonSrcDir = "../src"
def commonTestSrcDir = "../test"
+5 -17
View File
@@ -2,13 +2,14 @@ description = 'Kotlin Standard Library JDK 7 extension'
apply plugin: 'kotlin'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_7)
JvmToolchain.updateJvmTarget(project, "1.6")
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
configurePublishing(project)
configureSourcesJar()
configureJavadocJar()
ext.javaHome = JDK_17
sourceSets {
main {
kotlin {
@@ -66,10 +67,6 @@ artifacts {
archives modularJar
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = JDK_17
}
compileKotlin {
kotlinOptions.freeCompilerArgs = [
"-Xallow-kotlin-package",
@@ -97,18 +94,12 @@ compileTestKotlin {
configureJvmIrBackend(project)
compileJava9Sources(project, 'kotlin.stdlib.jdk7')
test {
executable = "$JDK_17/bin/java"
}
LibrariesCommon.configureJava9Compilation(project, 'kotlin.stdlib.jdk7')
task testJdk6Tests(type: Test) {
dependsOn(':kotlin-stdlib:testClasses')
group = "verification"
executable = "$JDK_17/bin/java"
doFirst {
testClassesDirs = project(':kotlin-stdlib').sourceSets.test.output
classpath = files(
@@ -121,12 +112,9 @@ task testJdk6Tests(type: Test) {
task testNoJdk7(type: Test, dependsOn: noJdk7TestClasses) {
group = "verification"
executable = "$JDK_17/bin/java"
testClassesDirs = sourceSets.noJdk7Test.output.classesDirs
classpath = sourceSets.noJdk7Test.runtimeClasspath
}
check.dependsOn testJdk6Tests, testNoJdk7
+6 -22
View File
@@ -2,14 +2,10 @@ description = 'Kotlin Standard Library JDK 8 extension'
apply plugin: 'kotlin'
configureJvm6Project(project)
configurePublishing(project)
configureSourcesJar()
configureJavadocJar()
ext.javaHome = JDK_18
ext.jvmTarget = "1.8"
dependencies {
compile project(':kotlin-stdlib')
compile project(':kotlin-stdlib-jdk7')
@@ -59,11 +55,6 @@ artifacts {
archives modularJar
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = JDK_18
kotlinOptions.jvmTarget = 1.8
}
compileKotlin {
kotlinOptions.freeCompilerArgs = [
"-Xallow-kotlin-package",
@@ -87,19 +78,13 @@ compileTestKotlin {
configureJvmIrBackend(project)
compileJava9Sources(project, 'kotlin.stdlib.jdk8')
test {
executable = "$JDK_18/bin/java"
}
LibrariesCommon.configureJava9Compilation(project, 'kotlin.stdlib.jdk8')
task testJdk6Tests(type: Test) { thisTask ->
dependsOn(':kotlin-stdlib:testClasses')
check.dependsOn(thisTask)
group = "verification"
executable = "$JDK_18/bin/java"
doFirst {
testClassesDirs = project(':kotlin-stdlib').sourceSets.test.output
classpath = files(
@@ -109,13 +94,12 @@ task testJdk6Tests(type: Test) { thisTask ->
}
}
[9, 10, 11].forEach { v ->
task(type: Test, "jdk${v}Test") { thisTask ->
[JdkMajorVersion.JDK_9, JdkMajorVersion.JDK_10, JdkMajorVersion.JDK_11].forEach { jvmVersion ->
tasks.register("jdk${jvmVersion.majorVersion}Test", Test) { thisTask ->
check.dependsOn(thisTask)
group = "verification"
executable = "${project.property("JDK_$v")}/bin/java"
if (v > 9)
enabled(file(executable).parentFile.isDirectory())
thisTask.javaLauncher.set(
JvmToolchain.getToolchainLauncherFor(project, jvmVersion)
)
}
}
@@ -7,8 +7,7 @@ plugins {
`maven-publish`
}
jvmTarget = "1.6"
javaHome = rootProject.extra["JDK_16"] as String
project.configureJvmToolchain(JdkMajorVersion.JDK_1_6)
val builtins by configurations.creating {
isCanBeResolved = true
@@ -54,11 +53,6 @@ val copySources by task<Sync> {
into(File(buildDir, "src"))
}
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
tasks.withType<KotlinCompile> {
dependsOn(copySources)
kotlinOptions {
+5 -4
View File
@@ -4,7 +4,9 @@ apply plugin: 'kotlin-platform-jvm'
archivesBaseName = 'kotlin-stdlib'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
configurePublishing(project)
configureJavadocJar()
configureSourcesJar()
@@ -38,6 +40,8 @@ sourceSets {
}
}
LibrariesCommon.configureJava9Compilation(project, 'kotlin.stdlib', [sourceSets.main.output])
configurations {
commonSources
longRunningTestCompile.extendsFrom(testCompile)
@@ -127,9 +131,6 @@ compileKotlin {
}
}
compileJava9Sources(project, 'kotlin.stdlib', [sourceSets.main.output])
compileTestKotlin {
kotlinOptions {
freeCompilerArgs += [
-5
View File
@@ -11,7 +11,6 @@ sourceSets {
compileTestKotlin {
kotlinOptions {
jdkHome = JDK_18
freeCompilerArgs = [
"-Xopt-in=kotlin.ExperimentalStdlibApi",
"-Xopt-in=kotlin.ExperimentalUnsignedTypes",
@@ -19,7 +18,3 @@ compileTestKotlin {
]
}
}
test {
executable = "$JDK_18/bin/java"
}
@@ -54,5 +54,3 @@ pluginBundle {
}
configurePluginMarkers(project)
test.executable = "${JDK_18}/bin/java"
@@ -2,7 +2,9 @@ description = 'Kotlin annotations for JVM'
apply plugin: 'kotlin'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
configurePublishing(project)
sourceSets {
@@ -20,11 +22,6 @@ dependencies {
configureSourcesJar()
configureJavadocJar()
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = JDK_16
kotlinOptions.jvmTarget = 1.6
}
compileKotlin {
kotlinOptions.freeCompilerArgs = [
"-Xallow-kotlin-package",
@@ -1,5 +1,4 @@
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.pill.PillExtension
plugins {
@@ -198,11 +197,6 @@ tasks.named<Task>("check") {
}
}
tasks.withType<KotlinCompile> {
kotlinOptions.jdkHome = rootProject.extra["JDK_18"] as String
kotlinOptions.jvmTarget = "1.8"
}
tasks.withType<Test> {
val noTestProperty = project.providers.gradleProperty("noTest")
onlyIf { !noTestProperty.isPresent }
@@ -210,17 +204,22 @@ tasks.withType<Test> {
dependsOn(":kotlin-gradle-plugin:validatePlugins")
dependsOnKotlinGradlePluginInstall()
executable = "${rootProject.extra["JDK_18"]!!}/bin/java"
systemProperty("kotlinVersion", rootProject.extra["kotlinVersion"] as String)
systemProperty("runnerGradleVersion", gradle.gradleVersion)
systemProperty("jdk9Home", rootProject.extra["JDK_9"] as String)
systemProperty("jdk10Home", rootProject.extra["JDK_10"] as String)
systemProperty("jdk11Home", rootProject.extra["JDK_11"] as String)
val jdk9Provider = project.getToolchainLauncherFor(JdkMajorVersion.JDK_9).map { it.metadata.installationPath.asFile.absolutePath }
val jdk10Provider = project.getToolchainLauncherFor(JdkMajorVersion.JDK_10).map { it.metadata.installationPath.asFile.absolutePath }
val jdk11Provider = project.getToolchainLauncherFor(JdkMajorVersion.JDK_11).map { it.metadata.installationPath.asFile.absolutePath }
val mavenLocalRepo = project.providers.systemProperty("maven.repo.local").forUseAtConfigurationTime().orNull
if (mavenLocalRepo != null) {
systemProperty("maven.repo.local", mavenLocalRepo)
// Query required JDKs paths only on execution phase to avoid triggering auto-download on project configuration phase
doFirst {
systemProperty("jdk9Home", jdk9Provider.get())
systemProperty("jdk10Home", jdk10Provider.get())
systemProperty("jdk11Home", jdk11Provider.get())
if (mavenLocalRepo != null) {
systemProperty("maven.repo.local", mavenLocalRepo)
}
}
useAndroidSdk()
@@ -595,8 +595,8 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
) = assertOutputContains("[KOTLIN] Kotlin compilation 'jdkHome' argument: $javaexecPath")
private fun getUserJdk(): JavaInfo = Jvm.forHome(File(System.getenv("JAVA_HOME")))
private fun getJdk9(): JavaInfo = Jvm.forHome(File(System.getenv("JDK_9")))
private fun getJdk11(): JavaInfo = Jvm.forHome(File(System.getenv("JDK_11")))
private fun getJdk9(): JavaInfo = Jvm.forHome(File(System.getProperty("jdk9Home")))
private fun getJdk11(): JavaInfo = Jvm.forHome(File(System.getProperty("jdk11Home")))
// replace required for windows paths so Groovy will not complain about unexpected char '\'
private fun getJdk9Path(): String = getJdk9().javaHome.absolutePath.replace("\\", "\\\\")
private fun getJdk11Path(): String = getJdk11().javaHome.absolutePath.replace("\\", "\\\\")
@@ -145,7 +145,6 @@ tasks {
}
projectTest {
executable = "${rootProject.extra["JDK_18"]!!}/bin/java"
dependsOn(tasks.named("validatePlugins"))
workingDir = rootDir
@@ -1,5 +1,5 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import proguard.gradle.ProGuardTask
import org.gradle.internal.jvm.Jvm
description = "Kotlin \"main\" script definition"
@@ -8,7 +8,6 @@ plugins {
id("jps-compatible")
}
val JDK_18: String by rootProject.extra
val jarBaseName = property("archivesBaseName") as String
val localPackagesToRelocate =
@@ -88,13 +87,28 @@ val proguard by task<CacheableProguardTask> {
outjars(fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar"))
jdkHome = File(JDK_18)
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_8))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraryJars)
libraryjars(
files(
firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!),
firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar", jdkHome = jdkHome!!),
toolsJarFile(jdkHome = jdkHome!!)
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/rt.jar",
"../Classes/classes.jar",
jdkHome = it.metadata.installationPath.asFile
)
},
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/jsse.jar",
"../Classes/jsse.jar",
jdkHome = it.metadata.installationPath.asFile
)
},
javaLauncher.map {
Jvm.forHome(it.metadata.installationPath.asFile).toolsJar
}
)
)
}
@@ -3,12 +3,6 @@ apply plugin: 'jps-compatible'
configureGradlePluginPublishing(project)
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.fork = false
}
pill {
variant = 'FULL'
}
@@ -60,5 +54,3 @@ pluginBundle {
}
configurePluginMarkers(project)
test.executable = "${JDK_18}/bin/java"
@@ -3,12 +3,6 @@ apply plugin: 'jps-compatible'
configurePublishing(project)
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.fork = false
}
pill {
variant = 'FULL'
}
@@ -45,5 +39,3 @@ ArtifactsKt.noDefaultJar(project)
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
configureSourcesJar()
configureJavadocJar()
test.executable = "${JDK_18}/bin/java"
@@ -6,12 +6,6 @@ dependencies {
embedded(project(":kotlinx-serialization-compiler-plugin")) { transitive = false }
}
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.fork = false
}
TaskProvider<Jar> jar = tasks.named("jar")
jar.configure {
manifestAttributes(manifest, project)
@@ -7,12 +7,6 @@ pill {
variant = 'FULL'
}
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.fork = false
}
dependencies {
compileOnly project(':kotlin-gradle-plugin')
compile project(':kotlin-gradle-plugin-api')
@@ -5,12 +5,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
tasks.withType<JavaCompile> {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
project.updateJvmTarget("1.6")
sourceSets {
"main" { projectDefault() }
+3 -1
View File
@@ -2,7 +2,9 @@ description 'Kotlin Script Runtime'
apply plugin: 'kotlin'
configureJvm6Project(project)
JvmToolchain.configureJvmToolchain(project, JdkMajorVersion.JDK_1_6)
LibrariesCommon.disableDeprecatedJvmTargetWarning(project)
configurePublishing(project)
dependencies {
@@ -5,7 +5,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
dependencies {
compile(kotlinStdlib())
+1 -1
View File
@@ -9,7 +9,7 @@ dependencies {
compile(kotlinStdlib())
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
sourceSets {
"main" { projectDefault() }
@@ -5,7 +5,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.6"
project.updateJvmTarget("1.6")
dependencies {
compile(kotlinStdlib())
@@ -3,7 +3,7 @@ plugins {
kotlin("jvm")
}
jvmTarget = "1.8"
project.updateJvmTarget("1.8")
val allTestsRuntime by configurations.creating
val testCompile by configurations
@@ -6,7 +6,7 @@ plugins {
id("jps-compatible")
}
jvmTarget = "1.8"
project.updateJvmTarget("1.8")
publish()
+19 -4
View File
@@ -1,5 +1,6 @@
@file:Suppress("HasPlatformType")
import org.gradle.internal.jvm.Jvm
import java.util.regex.Pattern.quote
description = "Kotlin Compiler"
@@ -265,7 +266,7 @@ val packCompiler by task<Jar> {
val proguard by task<CacheableProguardTask> {
dependsOn(packCompiler)
jdkHome = File(JDK_18)
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_8))
configuration("$projectDir/compiler.pro")
@@ -291,9 +292,23 @@ val proguard by task<CacheableProguardTask> {
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraries)
libraryjars(
files(
firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!),
firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar", jdkHome = jdkHome!!),
toolsJarFile(jdkHome = jdkHome!!)
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/rt.jar",
"../Classes/classes.jar",
jdkHome = it.metadata.installationPath.asFile
)
},
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/jsse.jar",
"../Classes/jsse.jar",
jdkHome = it.metadata.installationPath.asFile
)
},
javaLauncher.map {
Jvm.forHome(it.metadata.installationPath.asFile).toolsJar
}
)
)