From 396717ee4f62d3ce2a186329885672ee169a9ef6 Mon Sep 17 00:00:00 2001 From: Derek Wickern Date: Wed, 4 Oct 2017 13:53:58 -0700 Subject: [PATCH] fix launcher jar paths not being quoted on Windows --- .../archetypes/scripts/BashStartScriptPlugin.scala | 11 +---------- .../typesafe/sbt/packager/jar/LauncherJarPlugin.scala | 4 ++-- src/sbt-test/jar/launcher-jar with spaces/build.sbt | 4 ++-- src/sbt-test/jar/launcher-jar/build.sbt | 4 ++-- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/main/scala/com/typesafe/sbt/packager/archetypes/scripts/BashStartScriptPlugin.scala b/src/main/scala/com/typesafe/sbt/packager/archetypes/scripts/BashStartScriptPlugin.scala index 410a614ec..02e5f750b 100644 --- a/src/main/scala/com/typesafe/sbt/packager/archetypes/scripts/BashStartScriptPlugin.scala +++ b/src/main/scala/com/typesafe/sbt/packager/archetypes/scripts/BashStartScriptPlugin.scala @@ -196,7 +196,7 @@ object BashStartScriptPlugin extends AutoPlugin { def apply(mainClass: String, config: BashScriptConfig, targetDir: File, mainClasses: Seq[String]): File = { val template = resolveTemplate(config.bashScriptTemplateLocation) val replacements = Seq( - "app_mainclass" -> mainClassReplacement(mainClass), + "app_mainclass" -> mainClass, "available_main_classes" -> usageMainClassReplacement(mainClasses) ) ++ config.bashScriptReplacements @@ -208,15 +208,6 @@ object BashStartScriptPlugin extends AutoPlugin { script } - private[this] def mainClassReplacement(mainClass: String): String = { - val jarPrefixed = """^\-jar (.*)""".r - val args = mainClass match { - case jarPrefixed(jarName) => Seq("-jar", jarName) - case className => Seq(className) - } - args.map(s => "\"" + s + "\"").mkString(" ") - } - private[this] def usageMainClassReplacement(mainClasses: Seq[String]): String = if (mainClasses.nonEmpty) mainClasses.mkString("Available main classes:\n\t", "\n\t", "") diff --git a/src/main/scala/com/typesafe/sbt/packager/jar/LauncherJarPlugin.scala b/src/main/scala/com/typesafe/sbt/packager/jar/LauncherJarPlugin.scala index 8db6e42ef..11a528974 100644 --- a/src/main/scala/com/typesafe/sbt/packager/jar/LauncherJarPlugin.scala +++ b/src/main/scala/com/typesafe/sbt/packager/jar/LauncherJarPlugin.scala @@ -39,11 +39,11 @@ object LauncherJarPlugin extends AutoPlugin { artifact.classifier.fold("")("-" + _) + "." + artifact.extension }, mainClass in (Compile, bashScriptDefines) := { - Some("-jar $lib_dir/" + (artifactPath in packageJavaLauncherJar).value.getName) + Some(s"""-jar "$$lib_dir/${(artifactPath in packageJavaLauncherJar).value.getName}"""") }, scriptClasspath in bashScriptDefines := Nil, mainClass in (Compile, batScriptReplacements) := { - Some("-jar %APP_LIB_DIR%\\" + (artifactPath in packageJavaLauncherJar).value.getName) + Some(s"""-jar "%APP_LIB_DIR%\\${(artifactPath in packageJavaLauncherJar).value.getName}"""") }, scriptClasspath in batScriptReplacements := Nil, mappings in Universal += { diff --git a/src/sbt-test/jar/launcher-jar with spaces/build.sbt b/src/sbt-test/jar/launcher-jar with spaces/build.sbt index 58578eb9f..cbe8bab0f 100644 --- a/src/sbt-test/jar/launcher-jar with spaces/build.sbt +++ b/src/sbt-test/jar/launcher-jar with spaces/build.sbt @@ -12,13 +12,13 @@ TaskKey[Unit]("checkClasspath") := { val bat = IO.read(dir / "bin" / "launcher-jar-test.bat") assert(bat contains "set \"APP_CLASSPATH=\"", "bat should set APP_CLASSPATH:\n" + bat) assert( - bat contains "set \"APP_MAIN_CLASS=-jar %APP_LIB_DIR%\\launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\"", + bat contains "set \"APP_MAIN_CLASS=-jar \"%APP_LIB_DIR%\\launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\"\"", "bat should set APP_MAIN_CLASS:\n" + bat ) val bash = IO.read(dir / "bin" / "launcher-jar-test") assert(bash contains "declare -r app_classpath=\"\"", "bash should declare app_classpath:\n" + bash) assert( - bash contains "declare -a app_mainclass=(\"-jar\" \"$lib_dir/launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\")", + bash contains "declare -a app_mainclass=(-jar \"$lib_dir/launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\")", "bash should declare app_mainclass:\n" + bash ) val jar = new java.util.jar.JarFile(dir / "lib" / "launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar") diff --git a/src/sbt-test/jar/launcher-jar/build.sbt b/src/sbt-test/jar/launcher-jar/build.sbt index 2a8c6c3ff..932addcbd 100644 --- a/src/sbt-test/jar/launcher-jar/build.sbt +++ b/src/sbt-test/jar/launcher-jar/build.sbt @@ -14,13 +14,13 @@ TaskKey[Unit]("checkClasspath") := { val bat = IO.read(dir / "bin" / "launcher-jar-test.bat") assert(bat contains "set \"APP_CLASSPATH=\"", "bat should set APP_CLASSPATH:\n" + bat) assert( - bat contains "set \"APP_MAIN_CLASS=-jar %APP_LIB_DIR%\\launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\"", + bat contains "set \"APP_MAIN_CLASS=-jar \"%APP_LIB_DIR%\\launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\"\"", "bat should set APP_MAIN_CLASS:\n" + bat ) val bash = IO.read(dir / "bin" / "launcher-jar-test") assert(bash contains "declare -r app_classpath=\"\"", "bash should declare app_classpath:\n" + bash) assert( - bash contains "declare -a app_mainclass=(\"-jar\" \"$lib_dir/launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\")", + bash contains "declare -a app_mainclass=(-jar \"$lib_dir/launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar\")", "bash should declare app_mainclass:\n" + bash ) val jar = new java.util.jar.JarFile(dir / "lib" / "launcher-jar-test.launcher-jar-test-0.1.0-launcher.jar")