Problem: When including several projects that include log4j2
plugins,
sbt-assembly
will encounter multiple versions of the Log4j2Plugins.dat
cache file that it won't be able to reconcile.
Solution: Log4j2 provides a PluginCache
class that creates consistent,
serialisable cache from multiple different ones.
This plugin provides a simple function to merge those files in a safe way.
For sbt 0.13.6+ add sbt-assembly-log4j2
as a dependency in
project/assembly.sbt
alongside sbt-assembly
:
resolvers += Resolver.url(
"idio",
url("http://dl.bintray.com/idio/sbt-plugins")
)(Resolver.ivyStylePatterns)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "<version>")
addSbtPlugin("org.idio" % "sbt-assembly-log4j2" % "0.1.0")
As bintray is closing down we have published this on github packages
To fetch it you need to set up the github packages sbt plugin
You need to have a personal github token defined in your environment, read more here: https://github.com/djspiewak/sbt-github-packages
project/project/plugins.sbt
addSbtPlugin("com.codecommit" % "sbt-github-packages" % "0.5.2")
project/plugins.sbt
resolvers += Resolver.githubPackages("idio")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "<version>")
addSbtPlugin("org.idio" % "sbt-assembly-log4j2" % "0.1.0")
In your merge strategy, add the following case:
import sbtassembly.Log4j2MergeStrategy
assemblyMergeStrategy in assembly := {
//...
case PathList(ps @ _*) if ps.last == "Log4j2Plugins.dat" => Log4j2MergeStrategy.plugincache
//...