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