diff --git a/buildSrc/src/main/kotlin/CommonUtil.kt b/buildSrc/src/main/kotlin/CommonUtil.kt index 2ed392d7ced..7236b8287ec 100644 --- a/buildSrc/src/main/kotlin/CommonUtil.kt +++ b/buildSrc/src/main/kotlin/CommonUtil.kt @@ -52,7 +52,7 @@ var Project.javaHome: String? get() = extra.takeIf { it.has("javaHome") }?.get("javaHome") as? String set(v) { extra["javaHome"] = v } -fun Project.generator(fqName: String) = task { +fun Project.generator(fqName: String) = smartJavaExec { classpath = the().sourceSets["test"].runtimeClasspath main = fqName workingDir = rootDir diff --git a/buildSrc/src/main/kotlin/SmartJavaExec.kt b/buildSrc/src/main/kotlin/SmartJavaExec.kt new file mode 100644 index 00000000000..ca390d8612c --- /dev/null +++ b/buildSrc/src/main/kotlin/SmartJavaExec.kt @@ -0,0 +1,47 @@ +import org.gradle.api.Project +import org.gradle.api.tasks.JavaExec +import org.gradle.jvm.tasks.Jar +import org.gradle.kotlin.dsl.task + +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +fun Project.smartJavaExec(configure: JavaExec.() -> Unit) = task javaExec@{ + configure() + + val jarTask = project.task("${name}WriteClassPath", Jar::class) { + val classpath = classpath + val main = main + dependsOn(classpath) + inputs.property("main", main) + doFirst { + val classPathString = classpath.joinToString(" ") { project.file(it).toURI().toString() } + manifest { + attributes( + mapOf( + "Class-Path" to classPathString, + "Main-Class" to main + ) + ) + } + } + archiveName = "$main.${this@javaExec.name}.classpath.container.$extension" + destinationDir = temporaryDir + } + + + + dependsOn(jarTask) + + doFirst { + main = "-jar" + + classpath = project.files() + val copyArgs = mutableListOf().also { it.addAll(args) } + args(jarTask.outputs.files.singleFile) + args(copyArgs) + + } +}