Add a user-friendly report that the JDK tools are missing

Issue #KT-20214 Fixed
This commit is contained in:
Sergey Igushkin
2018-05-03 19:42:08 +03:00
parent 50116fd8fc
commit 352fb4a1c8
2 changed files with 18 additions and 2 deletions
@@ -198,6 +198,9 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments>() : AbstractKo
@TaskAction
open fun execute(inputs: IncrementalTaskInputs): Unit {
// Check that the JDK tools are available in Gradle (fail-fast, instead of a fail during the compiler run):
findToolsJar()
val sourceRoots = getSourceRoots()
val allKotlinSources = sourceRoots.kotlinSourceFiles
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.gradle.tasks
import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ResolvedDependency
@@ -86,8 +87,20 @@ internal fun findKotlinScriptJvmClasspath(project: Project): List<File> =
internal fun findKotlinReflectClasspath(project: Project): List<File> =
findKotlinModuleJar(project, KOTLIN_REFLECT_EXPECTED_CLASS, KOTLIN_REFLECT)
internal fun findToolsJar(): File? =
Class.forName("com.sun.tools.javac.util.Context")?.let(::findJarByClass)
internal fun findToolsJar(): File? {
val javacUtilContextClass =
try {
Class.forName("com.sun.tools.javac.util.Context")
} catch (classNotFound: ClassNotFoundException) {
val javaHome = System.getProperty("java.home") // current Java installation path
throw GradleException(
"Kotlin could not find the required JDK tools in the Java installation ${javaHome?.let { "'$it' " }.orEmpty()}" +
"used by Gradle. Make sure Gradle is running on a JDK, not JRE.",
classNotFound
)
}
return javacUtilContextClass?.let(::findJarByClass)
}
internal fun findCoroutinesClasspath(): List<File> {
val classLoader = Thread.currentThread().contextClassLoader