diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index d035e25..43871ef 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -29,6 +29,7 @@ dependencies { testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit") testImplementation("org.apache.commons:commons-compress:1.28.0") + testImplementation("org.apache.commons:commons-text:1.15.0") } gradlePlugin { diff --git a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt b/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt index f78be5f..f8b9825 100644 --- a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt +++ b/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt @@ -1,5 +1,6 @@ package com.ryandens.javaagent +import org.apache.commons.text.StringEscapeUtils import org.gradle.internal.jvm.Jvm import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner @@ -213,7 +214,7 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" Paths.get("..", "simple-agent").toFile().copyRecursively(simpleAgentTestDir) simpleAgentBuildScript.writeText( simpleAgentBuildScript.readText().replace( - "id(\"com.ryandens.java-conventions\")\n", + "id(\"com.ryandens.java-conventions\")", "", ), ) @@ -226,6 +227,8 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" """, ) + val commandLine = StringEscapeUtils.escapeJava(""".${File.separator}hello-world""") + val javaHome = StringEscapeUtils.escapeJava(Jvm.current().getJavaHome().toString()) helloWorldDir.resolve("build.gradle").writeText( """ plugins { @@ -251,8 +254,8 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" dependsOn('installDist') inputs.files(layout.buildDirectory.dir('install')) workingDir(layout.buildDirectory.dir('install').map { it.dir('hello-world').dir('bin') }) - commandLine '.${File.separator}hello-world' - environment JAVA_HOME: "${Jvm.current().getJavaHome()}" + commandLine '$commandLine' + environment JAVA_HOME: "$javaHome" } test { diff --git a/plugin/src/main/java/com/ryandens/javaagent/JavaForkOptionsConfigurer.java b/plugin/src/main/java/com/ryandens/javaagent/JavaForkOptionsConfigurer.java index 5912925..d197971 100644 --- a/plugin/src/main/java/com/ryandens/javaagent/JavaForkOptionsConfigurer.java +++ b/plugin/src/main/java/com/ryandens/javaagent/JavaForkOptionsConfigurer.java @@ -8,6 +8,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.gradle.api.provider.Provider; +import org.gradle.internal.os.OperatingSystem; import org.gradle.process.CommandLineArgumentProvider; import org.gradle.process.JavaForkOptions; @@ -42,7 +43,12 @@ public Iterable asArguments() { .map( file -> { try { - return "-javaagent:" + file.getCanonicalPath(); + String path = file.getCanonicalPath(); + if (OperatingSystem.current().isWindows()) { + // Don't let the spaces in the Windows path break the command line + path = '"' + path + '"'; + } + return "-javaagent:" + path; } catch (IOException e) { throw new UncheckedIOException(e); }