From ac502d551d54cecdadc6ac9cc02898d730867139 Mon Sep 17 00:00:00 2001 From: rockjam <5min4eq.unity@gmail.com> Date: Fri, 24 Jun 2016 08:06:16 +0300 Subject: explicitly specify jar extension, delete file before writing jar in lib --- examples/uber-jar-example/build/build.scala | 2 +- plugins/uber-jar/src/UberJar.scala | 28 +++++++++------------------- stage2/Lib.scala | 4 +++- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/examples/uber-jar-example/build/build.scala b/examples/uber-jar-example/build/build.scala index a36e27b..fec58ae 100644 --- a/examples/uber-jar-example/build/build.scala +++ b/examples/uber-jar-example/build/build.scala @@ -11,6 +11,6 @@ class Build(val context: Context) extends BaseBuild with UberJar { ScalaDependency("org.typelevel", "cats", "0.6.0") ) - override def uberJarName = projectName + "-0.0.1" + override def uberJarName = projectName + "-0.0.1" + ".jar" } diff --git a/plugins/uber-jar/src/UberJar.scala b/plugins/uber-jar/src/UberJar.scala index 51edbf1..1a31dd8 100644 --- a/plugins/uber-jar/src/UberJar.scala +++ b/plugins/uber-jar/src/UberJar.scala @@ -15,7 +15,7 @@ trait UberJar extends BaseBuild { def uberJarMainClass: Option[String] = Some(runClass) - def uberJarName: String = projectName + def uberJarName: String = projectName + ".jar" } @@ -33,6 +33,7 @@ class UberJarLib(logger: Logger) { * @param target build's target directory * @param compileTarget directory where compiled classfiles are * @param classpath build's classpath + * @param mainClass optional main class * @param jarName name of resulting jar file */ def create(target: File, @@ -43,12 +44,9 @@ class UberJarLib(logger: Logger) { log(s"Compiler target directory is: $compileTarget") log(s"Classpath is: $classpath") log(s"Target directory is: $target") + log(s"Jar name is: $jarName") mainClass foreach (c => log(s"Main class is is: $c")) - log("Creating far file...") - val file = createJarFile(target.toPath, jarName) - log("Creating far file - DONE") - val jars = classpath.files filter (f => jarFileMatcher.matches(f.toPath)) log(s"Found ${jars.length} jar dependencies: \n ${jars mkString "\n"}") @@ -57,24 +55,16 @@ class UberJarLib(logger: Logger) { log("Extracting jars - DONE") log("Writing jar file...") - val optOutput = lib.jarFile(file, Seq(compileTarget, extractedJarsRoot), mainClass) + val uberJarPath = target.toPath.resolve(jarName) + val uberJar = + lib.jarFile(uberJarPath.toFile, Seq(compileTarget, extractedJarsRoot), mainClass) getOrElse { + throw new Exception("Jar file wasn't created!") + } log("Writing jar file - DONE") - optOutput foreach { uberJar => - System.err.println(s"Uber jar created. You can grab it at $uberJar") - } - + System.err.println(s"Uber jar created. You can grab it at $uberJar") } - private def createJarFile(parent: Path, name: String): File = { - val path = parent.resolve(validJarName(name)) - Files.deleteIfExists(path) - Files.createFile(path) - path.toFile - } - - private def validJarName(name: String) = if (name.endsWith(".jar")) name else name + ".jar" - /** * Extracts jars, and writes them on disk. Returns root directory of extracted jars * TODO: in future we probably should save extracted jars in target directory, to reuse them on second run diff --git a/stage2/Lib.scala b/stage2/Lib.scala index 2e3c0e5..620c009 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -215,6 +215,7 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ } def jarFile( jarFile: File, files: Seq[File], mainClass: Option[String] = None ): Option[File] = { + Files.deleteIfExists(jarFile.toPath) if( files.isEmpty ){ None } else { @@ -224,7 +225,8 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ manifest.getMainAttributes.put(Attributes.Name.MANIFEST_VERSION, "1.0") manifest.getMainAttributes.putValue("Created-By", Option(System.getProperty("java.runtime.version")) getOrElse "1.7.0_06 (Oracle Corporation)") - mainClass foreach { className => manifest.getMainAttributes.put(Attributes.Name.MAIN_CLASS, className) + mainClass foreach { className => + manifest.getMainAttributes.put(Attributes.Name.MAIN_CLASS, className) } val jar = new JarOutputStream(new FileOutputStream(jarFile), manifest) try{ -- cgit v1.2.3