in build.sbt [215:254]
def discardMeta(f: String): Boolean =
discardMetaFiles.contains(f) || signedMetaExtensions.exists(f.endsWith) || f.endsWith(
".kotlin_module"
)
lazy val assemblySettings = Seq(
assembly / assemblyMergeStrategy := {
case PathList("javax", "xml", "bind", _*) =>
// prefer jakarta over jaxb
CustomMergeStrategy("xml")(exclude("jaxb-api", "avro-tools"))
case PathList("org", "apache", "log4j", _*) =>
// prefer reload4j over log4j
CustomMergeStrategy("log4j")(exclude("log4j", "avro-tools"))
case PathList("org", "slf4j", "impl", _*) =>
// prefer slf4j-reload4j over slf4j-log4j12
CustomMergeStrategy("slf4j-log4j")(exclude("slf4j-log4j12", "avro-tools"))
case "log4j.properties" =>
MergeStrategy.preferProject
case x if x.endsWith(".properties") =>
MergeStrategy.filterDistinctLines
case PathList("META-INF", "services", _*) =>
MergeStrategy.filterDistinctLines
case PathList("META-INF", "NOTICE") =>
// avro-tools META-INF/NOTICE must not be renamed
CustomMergeStrategy.rename(preserveName("avro-tools"))
case PathList("META-INF", "NOTICE.txt" | "FastDoubleParser-NOTICE") =>
MergeStrategy.rename
case PathList("NOTICE") =>
MergeStrategy.rename
case PathList("META-INF", "maven" | "versions", _*) =>
MergeStrategy.discard
case PathList("META-INF", x) if discardMeta(x) =>
MergeStrategy.discard
case PathList("module-info.class" | "LICENSE") =>
MergeStrategy.discard
case x =>
// avro-tools is a fat jar
// in case of conflict prefer library from other source
CustomMergeStrategy("avro-tools")(exclude("avro-tools"))
}