From 4e4c5a7d9e923d525a448e814e074de7698cc078 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 24 Mar 2017 23:42:41 -0700 Subject: [PATCH] Put the javac command in a file. Also introduce fixSlashes(). --- .../src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt | 2 +- .../src/main/kotlin/com/beust/kobalt/misc/KFiles.kt | 3 +++ .../kotlin/com/beust/kobalt/app/remote/KobaltClient.kt | 3 ++- .../kotlin/com/beust/kobalt/plugin/java/JavaCompiler.kt | 9 ++++++--- src/test/kotlin/com/beust/kobalt/BaseTest.kt | 6 +++--- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt index 807a6aba..ff282ae0 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt @@ -65,7 +65,7 @@ class JarUtils { entry = stream.nextEntry } } else { - val entryFileName = file.to(foundFile.path).path.replace("\\", "/") + val entryFileName = KFiles.fixSlashes(file.to(foundFile.path)) val entry = JarEntry(entryFileName) entry.time = localFile.lastModified() addEntry(FileInputStream(localFile), entry, outputStream, onError) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt index 83f6cc32..152dbc31 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt @@ -115,6 +115,9 @@ class KFiles { */ fun joinFileAndMakeDir(vararg ts: String) = joinDir(joinAndMakeDir(ts.slice(0..ts.size - 2)), ts[ts.size - 1]) + fun fixSlashes(f: File) = KFiles.fixSlashes(f.path) + fun fixSlashes(s: String) = s.replace('\\', '/') + fun makeDir(dir: String, s: String? = null) = (if (s != null) File(dir, s) else File(dir)).apply { mkdirs() } diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltClient.kt b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltClient.kt index 1c83413c..0a969c1d 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltClient.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltClient.kt @@ -8,6 +8,7 @@ import com.beust.kobalt.homeDir import com.beust.kobalt.internal.GraphUtil import com.beust.kobalt.internal.KobaltSettings import com.beust.kobalt.maven.aether.Exceptions +import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.warn import com.google.gson.Gson import com.google.inject.Guice @@ -31,7 +32,7 @@ class KobaltClient : Runnable { val client = OkHttpClient() val port = KobaltServer.port ?: 1240 val url = "ws://localhost:$port/v1/getDependencyGraph" - val buildFile = homeDir("kotlin/kobalt/kobalt/src/Build.kt").replace("\\", "/") + val buildFile = KFiles.fixSlashes(homeDir("kotlin/kobalt/kobalt/src/Build.kt")) val request = Request.Builder() // .url("ws://echo.websocket.org") .url("$url?buildFile=$buildFile") diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaCompiler.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaCompiler.kt index 439e090f..01b7c90d 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaCompiler.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaCompiler.kt @@ -15,6 +15,7 @@ import com.google.inject.Inject import com.google.inject.Singleton import java.io.File import java.io.PrintWriter +import java.nio.file.Files import javax.tools.DiagnosticCollector import javax.tools.JavaFileObject import javax.tools.ToolProvider @@ -77,11 +78,13 @@ class JavaCompiler @Inject constructor(val jvmCompiler: JvmCompiler, val kobaltL allArgs.addAll(info.compilerArgs) allArgs.addAll(info.sourceFiles.filter { File(it).isFile }) - val pb = ProcessBuilder(allArgs) + val dir = Files.createTempDirectory("kobalt").toFile() + val atFile = File(dir, "javac-" + project?.name + ".txt") + atFile.writeText(KFiles.fixSlashes(allArgs.subList(1, allArgs.size).joinToString(" "))) + val pb = ProcessBuilder(executable.absolutePath, "@" + KFiles.fixSlashes(atFile)) pb.inheritIO() - val line = allArgs.joinToString(" ") logk(1, " Java compiling " + Strings.pluralizeAll(info.sourceFiles.size, "file")) - logk(2, " Java compiling $line") + logk(2, " Java compiling file: " + KFiles.fixSlashes(atFile)) command = allArgs.joinToString(" ") + " " + info.sourceFiles.joinToString(" ") val process = pb.start() diff --git a/src/test/kotlin/com/beust/kobalt/BaseTest.kt b/src/test/kotlin/com/beust/kobalt/BaseTest.kt index 14566168..97a08242 100644 --- a/src/test/kotlin/com/beust/kobalt/BaseTest.kt +++ b/src/test/kotlin/com/beust/kobalt/BaseTest.kt @@ -7,6 +7,7 @@ import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.internal.KobaltPluginXml import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.build.BuildFile +import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.log import org.testng.annotations.BeforeClass import java.io.File @@ -27,7 +28,7 @@ open class BaseTest(val compilerFactory: BuildFileCompiler.IFactory? = null) { */ fun compileSingleProject(projectText: String, args: Args = Args()) : Project { val projectName = "p" + Math.abs(Random().nextInt()) - val projectDirectory = Files.createTempDirectory("kobaltTest").toFile().path.replace("\\", "/") + val projectDirectory = KFiles.fixSlashes(Files.createTempDirectory("kobaltTest").toFile()) val buildFileText= """ import com.beust.kobalt.* import com.beust.kobalt.api.* @@ -87,7 +88,6 @@ open class BaseTest(val compilerFactory: BuildFileCompiler.IFactory? = null) { forceRecompile = true) } - fun createTemporaryProjectDirectory() = Files.createTempDirectory("kobaltTest").toFile().path - .replace("\\", "/") + fun createTemporaryProjectDirectory() = KFiles.fixSlashes(Files.createTempDirectory("kobaltTest").toFile()) }