diff --git a/build.sbt b/build.sbt index 1c9db2cfd..6b253ab24 100644 --- a/build.sbt +++ b/build.sbt @@ -51,14 +51,22 @@ lazy val `lm-coursier-shaded` = project shadeNamespaces ++= Set( "coursier", "shapeless", - "argonaut" + "argonaut", + "org.fusesource", + "org.jline" ), libraryDependencies ++= Seq( "io.get-coursier" %% "coursier" % coursierVersion0 % "shaded", "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) + } + +}