Merge pull request #451 from alexarchambault/topic/tweak-sbt-shading

Tweak sbt-shading
This commit is contained in:
Alexandre Archambault 2017-03-10 09:41:44 +01:00 committed by GitHub
commit 33a5b55655
3 changed files with 60 additions and 22 deletions

View File

@ -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
)

View File

@ -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

View File

@ -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