From 2c18c9472cb7430e631917d5a5a4b5c972e7ea37 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 10 Mar 2017 00:34:21 +0100 Subject: [PATCH 1/3] Don't shade too many things --- build.sbt | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 4c342a3ef..2ac3f4dde 100644 --- a/build.sbt +++ b/build.sbt @@ -17,7 +17,17 @@ lazy val core = crossProject .enablePlugins(_root_.coursier.ShadingPlugin) ) .jvmSettings( - libraryDependencies += "com.lihaoyi" %% "fastparse" % "0.4.2" % "shaded", + libraryDependencies ++= { + + val extra = + if (scalaBinaryVersion.value == "2.10") + // directly depending on that one so that it doesn't get shaded + Seq("org.scalamacros" %% "quasiquotes" % "2.1.0") + else + Nil + + Seq("com.lihaoyi" %% "fastparse" % "0.4.2" % "shaded") ++ extra + }, shadingSettings ) .jsSettings( @@ -391,7 +401,7 @@ lazy val `sbt-shading` = project .settings(pluginSettings) .settings( resolvers += Resolver.mavenLocal, - libraryDependencies += { + libraryDependencies ++= { val coursierJarjarVersion = "1.0.1-coursier-SNAPSHOT" def coursierJarjarFoundInM2 = (file(sys.props("user.home")) / s".m2/repository/org/anarres/jarjar/jarjar-core/$coursierJarjarVersion").exists() @@ -412,7 +422,14 @@ lazy val `sbt-shading` = project fallback } - "org.anarres.jarjar" % "jarjar-core" % jarjarVersion % "shaded" + Seq( + "org.anarres.jarjar" % "jarjar-core" % jarjarVersion % "shaded", + // dependencies of jarjar-core - directly depending on these so that they don't get shaded + "com.google.code.findbugs" % "jsr305" % "2.0.2", + "org.ow2.asm" % "asm-commons" % "5.0.3", + "org.ow2.asm" % "asm-util" % "5.0.3", + "org.slf4j" % "slf4j-api" % "1.7.12" + ) }, shadingSettings ) From 24879cbde2c864daf39af6e965506866e53ef0ab Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 10 Mar 2017 00:34:41 +0100 Subject: [PATCH 2/3] Tweak sbt-shading output --- .../main/scala-2.10/coursier/Shading.scala | 57 +++++++++++++------ 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/sbt-shading/src/main/scala-2.10/coursier/Shading.scala b/sbt-shading/src/main/scala-2.10/coursier/Shading.scala index 0d878728f..50ceeeeab 100644 --- a/sbt-shading/src/main/scala-2.10/coursier/Shading.scala +++ b/sbt-shading/src/main/scala-2.10/coursier/Shading.scala @@ -98,6 +98,11 @@ object Shading { ) } + // Things could be split into intermediate tasks here, like + // shadingDependencies: Seq[coursier.Dependency], dependencies whose JARs are to be shaded + // shadingJars: Seq[java.io.File], JARs about to be shaded + // Note that shadingDependencies is not explicitly calculated below. + val dependencyArtifacts = res.dependencyArtifacts .filter { case (_, a) => classpathTypes(a.`type`) } .groupBy(_._1) @@ -115,12 +120,18 @@ object Shading { val compileOnlyDeps = compileDeps.filterNot(shadedDeps) - log.info(s"Found ${compileDeps.size} dependencies in $baseConfig") - log.debug(compileDeps.toVector.map(" " + _).sorted.mkString("\n")) - log.info(s"Found ${compileOnlyDeps.size} dependencies only in $baseConfig") - log.debug(compileOnlyDeps.toVector.map(" " + _).sorted.mkString("\n")) - log.info(s"Found ${shadedDeps.size} dependencies in $shadedConf") - log.debug(shadedDeps.toVector.map(" " + _).sorted.mkString("\n")) + log.debug( + s"Found ${compileDeps.size} dependencies in $baseConfig\n" + + compileDeps.toVector.map(" " + _).sorted.mkString("\n") + ) + log.debug( + s"Found ${compileOnlyDeps.size} dependencies only in $baseConfig\n" + + compileOnlyDeps.toVector.map(" " + _).sorted.mkString("\n") + ) + log.debug( + s"Found ${shadedDeps.size} dependencies in $shadedConf\n" + + shadedDeps.toVector.map(" " + _).sorted.mkString("\n") + ) def files(deps: Set[Dependency]) = res .subset(deps) @@ -131,26 +142,36 @@ object Shading { .map(_.url) .flatMap(artifactFilesOrErrors0.get) - val compileOnlyJars = files(compileOnlyDeps) - val shadedJars = files(shadedDeps) + val noShadeJars = files(compileOnlyDeps) + val allShadedConfJars = files(shadedDeps) - log.info(s"Found ${compileOnlyJars.length} JAR(s) only in $baseConfig") - log.debug(compileOnlyJars.map(" " + _).sorted.mkString("\n")) - log.info(s"Found ${shadedJars.length} JAR(s) in $shadedConf") - log.debug(shadedJars.map(" " + _).sorted.mkString("\n")) + log.debug( + s"Found ${noShadeJars.length} JAR(s) only in $baseConfig\n" + + noShadeJars.map(" " + _).sorted.mkString("\n") + ) + log.debug( + s"Found ${allShadedConfJars.length} JAR(s) in $shadedConf\n" + + allShadedConfJars.map(" " + _).sorted.mkString("\n") + ) - val shadeJars = shadedJars.filterNot(compileOnlyJars.toSet) - val shadeClasses = shadeJars.flatMap(Shading.jarClassNames) + val toShadeJars = allShadedConfJars.filterNot(noShadeJars.toSet) - log.info(s"Will shade ${shadeClasses.length} class(es)") - log.debug(shadeClasses.map(" " + _).sorted.mkString("\n")) + log.info( + s"Shading ${toShadeJars.length} JAR(s):\n" + + toShadeJars.map(" " + _).sorted.mkString("\n") + ) + + val toShadeClasses = toShadeJars.flatMap(jarClassNames) + + log.info(s"Found ${toShadeClasses.length} class(es) in JAR(s) to be shaded") + log.debug(toShadeClasses.map(" " + _).sorted.mkString("\n")) val processor = new DefaultJarProcessor - for (cls <- shadeClasses) + for (cls <- toShadeClasses) processor.addClassRename(new ClassRename(cls, shadingNamespace + ".@0")) val transformer = new JarTransformer(outputJar, processor) - val cp = new ClassPath(file(sys.props("user.dir")), (baseJar +: shadeJars).toArray) + val cp = new ClassPath(file(sys.props("user.dir")), (baseJar +: toShadeJars).toArray) transformer.transform(cp) outputJar From 5b4718028547b89dd17417e4d4710573c4e64ce1 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 10 Mar 2017 01:00:17 +0100 Subject: [PATCH 3/3] Update flaky test --- .../sbt-reactjs/sbtVersion_0.13_scalaVersion_2.10/0.6.+ | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/shared/src/test/resources/resolutions/com.github.ddispaltro/sbt-reactjs/sbtVersion_0.13_scalaVersion_2.10/0.6.+ b/tests/shared/src/test/resources/resolutions/com.github.ddispaltro/sbt-reactjs/sbtVersion_0.13_scalaVersion_2.10/0.6.+ index ab59b3159..6b0a703ae 100644 --- a/tests/shared/src/test/resources/resolutions/com.github.ddispaltro/sbt-reactjs/sbtVersion_0.13_scalaVersion_2.10/0.6.+ +++ b/tests/shared/src/test/resources/resolutions/com.github.ddispaltro/sbt-reactjs/sbtVersion_0.13_scalaVersion_2.10/0.6.+ @@ -54,7 +54,7 @@ org.webjars.npm:commoner:0.10.3:default org.webjars.npm:esprima-fb:15001.1.0-dev-harmony-fb:default org.webjars.npm:glob:4.2.1:default org.webjars.npm:graceful-fs:3.0.7:default -org.webjars.npm:iconv-lite:0.4.13:default +org.webjars.npm:iconv-lite:0.4.15:default org.webjars.npm:inflight:1.0.6:default org.webjars.npm:inherits:2.0.3:default org.webjars.npm:install:0.1.8:default