From c0acb02efd4c073bba8ee4b7ded7b1812df430a0 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 9 Aug 2019 16:18:29 +0200 Subject: [PATCH 1/2] Check that lmcoursier is the only ns in lm-coursier-shaded JAR --- build.sbt | 8 +++++++- project/Check.scala | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 project/Check.scala diff --git a/build.sbt b/build.sbt index 1c9db2cfd..d67143944 100644 --- a/build.sbt +++ b/build.sbt @@ -58,7 +58,13 @@ lazy val `lm-coursier-shaded` = project "org.scala-lang.modules" %% "scala-xml" % "1.2.0", // depending on that one so that it doesn't get shaded "org.scala-sbt" %% "librarymanagement-ivy" % "1.2.4", "org.scalatest" %% "scalatest" % "3.0.8" % Test - ) + ), + packageBin.in(Shading) := { + val jar = packageBin.in(Shading).value + // ignoreFiles is there temporarily, until https://github.com/coursier/coursier/pull/1317 is merged + Check.onlyNamespace("lmcoursier", jar, ignoreFiles = Set("coursier.properties")) + jar + } ) lazy val `sbt-coursier-shared` = project diff --git a/project/Check.scala b/project/Check.scala new file mode 100644 index 000000000..4028caa34 --- /dev/null +++ b/project/Check.scala @@ -0,0 +1,25 @@ +import java.io.File +import java.util.zip.ZipFile + +import scala.collection.JavaConverters._ + +object Check { + + def onlyNamespace(ns: String, jar: File, ignoreFiles: Set[String] = Set.empty): Unit = { + val zf = new ZipFile(jar) + val unrecognized = zf.entries() + .asScala + .map(_.getName) + .filter { n => + !n.startsWith("META-INF/") && !n.startsWith(ns + "/") && + n != "reflect.properties" && // scala-reflect adds that + !ignoreFiles(n) + } + .toVector + .sorted + for (u <- unrecognized) + System.err.println(s"Unrecognized: $u") + assert(unrecognized.isEmpty) + } + +} From bd4a2d5adf3db409a8c30897605f742095f9e5f0 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 9 Aug 2019 16:19:35 +0200 Subject: [PATCH 2/2] Add extra namespaces in shading config These aren't required, but passing them beforehand speeds up shading --- build.sbt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index d67143944..6b253ab24 100644 --- a/build.sbt +++ b/build.sbt @@ -51,7 +51,9 @@ lazy val `lm-coursier-shaded` = project shadeNamespaces ++= Set( "coursier", "shapeless", - "argonaut" + "argonaut", + "org.fusesource", + "org.jline" ), libraryDependencies ++= Seq( "io.get-coursier" %% "coursier" % coursierVersion0 % "shaded",