【发布时间】:2020-12-17 11:39:37
【问题描述】:
过去两三天我一直在尝试解决我的 sbt 程序集构建逻辑的一些问题。它与assemblyMergeStrategy 有关。 SBT 版本 1.2.8。
看起来像这样:
assemblyMergeStrategy in assembly := {
case PathList("javax", "inject", _ @ _*) => MergeStrategy.last
case PathList("javax", "servlet", _ @ _*) => MergeStrategy.last
case PathList("javax", "activation", _ @ _*) => MergeStrategy.last
case PathList("org", "apache", _ @ _*) => MergeStrategy.last
case PathList("com", "google", _ @ _*) => MergeStrategy.last
case PathList("com", "typesafe", _ @ _*) => MergeStrategy.last
case PathList("com", "microsoft", xs @ _*) => MergeStrategy.last
case "about.html" => MergeStrategy.rename
case "plugin.properties" => MergeStrategy.last
case "log4j.properties" => MergeStrategy.last
case PathList("META-INF", xs @ _*) =>
xs match {
case "MANIFEST.MF" :: Nil => MergeStrategy.discard
case "mailcap" :: Nil => MergeStrategy.last
case "mimetypes.default" :: Nil => MergeStrategy.last
// Concatenate everything in the services directory to keep GeoTools happy.
case "services" :: _ :: Nil =>
MergeStrategy.concat
// Concatenate these to keep JAI happy.
case "javax.media.jai.registryFile.jai" :: Nil | "registryFile.jai" :: Nil |
"registryFile.jaiext" :: Nil =>
MergeStrategy.concat
case name :: Nil => {
// Must exclude META-INF/*.([RD]SA|SF) to avoid "Invalid signature file digest for Manifest main attributes" exception.
if (name.endsWith(".RSA") || name.endsWith(".DSA") || name.endsWith(".SF"))
MergeStrategy.discard
else
MergeStrategy.first
}
case _ => MergeStrategy.first
}
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
//MergeStrategy.first
}
出于某种原因,我认为没有选择 com.microsoft 合并策略或类似的策略。
[error] 1 error was encountered during merge
[error] java.lang.RuntimeException: deduplicate: different file contents found in the following:
[error] /Users/t23528/.ivy2/cache/com.microsoft.azure/azure-mgmt-appservice/jars/azure-mgmt-appservice-1.23.0.jar:maven.properties
[error] /Users/t23528/.ivy2/cache/com.microsoft.azure/azure-mgmt-batch/jars/azure-mgmt-batch-1.23.0.jar:maven.properties
[error] /Users/t23528/.ivy2/cache/com.microsoft.azure/azure-mgmt-batchai/jars/azure-mgmt-batchai-1.23.0.jar:maven.properties
还有更多来自 Microsoft jars,都带有相同的 maven.properties 错误。
如果我将程序集的最后一部分保留为
case x =>
//val oldStrategy = (assemblyMergeStrategy in assembly).value
//oldStrategy(x)
MergeStrategy.first
构建通过。知道我做错了什么吗?任何帮助将不胜感激。
我尝试升级到最新的 sbt 版本 1.3.13,看起来它正在使用其他缓存,不再是 ivy2,而是 Coursier。
[error] 1 error was encountered during merge
[error] java.lang.RuntimeException: deduplicate: different file contents found in the following:
[error] /Users/t23528/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/microsoft/azure/azure-mgmt-appservice/1.23.0/azure-mgmt-appservice-1.23.0.jar:maven.properties
[error] /Users/t23528/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/microsoft/azure/azure-mgmt-batch/1.23.0/azure-mgmt-batch-1.23.0.jar:maven.properties
谢谢。
【问题讨论】:
标签: scala sbt sbt-assembly