diff --git a/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala b/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala index 0de4519c3..5f971d2ec 100644 --- a/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala +++ b/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala @@ -53,7 +53,20 @@ object Bootstrap extends CaseApp[BootstrapOptions] { } } - private def createJarBootstrap(javaOpts: Seq[String], output: File, content: Array[Byte]): Unit = { + private def createJarBootstrap(javaOpts: Seq[String], output: File, content: Array[Byte], withPreamble: Boolean): Unit = + if (withPreamble) + createJarBootstrapWithPreamble(javaOpts, output, content) + else + createSimpleJarBootstrap(output, content) + + private def createSimpleJarBootstrap(output: File, content: Array[Byte]): Unit = + try Files.write(output.toPath, content) + catch { case e: IOException => + Console.err.println(s"Error while writing $output${Option(e.getMessage).fold("")(" (" + _ + ")")}") + sys.exit(1) + } + + private def createJarBootstrapWithPreamble(javaOpts: Seq[String], output: File, content: Array[Byte]): Unit = { val javaCmd = Seq("java") ++ javaOpts @@ -221,7 +234,8 @@ object Bootstrap extends CaseApp[BootstrapOptions] { createJarBootstrap( javaOpts, output, - buffer.toByteArray + buffer.toByteArray, + options.options.preamble ) } @@ -267,7 +281,8 @@ object Bootstrap extends CaseApp[BootstrapOptions] { createJarBootstrap( javaOpts, output, - baos.toByteArray + baos.toByteArray, + options.options.preamble ) } diff --git a/cli/src/main/scala-2.12/coursier/cli/options/BootstrapSpecificOptions.scala b/cli/src/main/scala-2.12/coursier/cli/options/BootstrapSpecificOptions.scala index 4ee172c77..da7e7e133 100644 --- a/cli/src/main/scala-2.12/coursier/cli/options/BootstrapSpecificOptions.scala +++ b/cli/src/main/scala-2.12/coursier/cli/options/BootstrapSpecificOptions.scala @@ -38,6 +38,8 @@ final case class BootstrapSpecificOptions( rule: List[String] = Nil, @Help("Add default rules to assembly rule list") defaultRules: Boolean = true, + @Help("Add preamble") + preamble: Boolean = true, @Recurse isolated: IsolatedLoaderOptions = IsolatedLoaderOptions(), @Recurse