Scala sbt汇编MergeStrategy问题



在过去的两三天里,我一直在尝试解决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
}

出于某种原因,我不认为微软的合并策略被选中或类似的东西。

[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 jar的内容,都有相同的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

谢谢。

你能试试这样的东西吗:

case x if x.contains("com.microsoft") => MergeStrategy.last

最新更新