Resolve problem with too long command line path in Gradle Windows

This commit is contained in:
Mikhail Glukhikh
2018-04-11 14:49:53 +03:00
parent 8b5faca2d1
commit 55da251ffc
2 changed files with 48 additions and 1 deletions
+1 -1
View File
@@ -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<JavaExec> {
fun Project.generator(fqName: String) = smartJavaExec {
classpath = the<JavaPluginConvention>().sourceSets["test"].runtimeClasspath
main = fqName
workingDir = rootDir
+47
View File
@@ -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> 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<Any?>().also { it.addAll(args) }
args(jarTask.outputs.files.singleFile)
args(copyArgs)
}
}