Scala sbt战略问题

Scala sbt战略问题,scala,sbt,sbt-assembly,Scala,Sbt,Sbt Assembly,在过去的两三天里,我一直在尝试解决sbt组装构建逻辑的一些问题。它与assemblyMergeStrategy相关。SBT版本1.2.8 它看起来像这样: assemblyMergeStrategy in assembly := { case PathList("javax", "inject", _ @ _*) => MergeStrategy.last case PathList("javax", &q

在过去的两三天里,我一直在尝试解决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
还有更多来自微软JAR的内容,都带有相同的
maven.properties
error

如果我将装配的最后一部分保留为

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

谢谢。

你能试试这样的东西吗:

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
    }
case x如果x.contains(“com.microsoft”)=>MergeStrategy.last

我刚才试过了。和以前一样的错误。感觉好像发生了一些非常奇怪的事情。