【问题标题】:Error with sbt-assembly and Play Frameworksbt-assembly 和 Play 框架出错
【发布时间】:2018-04-02 18:25:39
【问题描述】:

试图构建一个play(2.6.6)+ scala.js应用程序的fat jar,得到

[error] (play/*:assembly) deduplicate: 在以下发现不同的文件内容: [错误] /home/user/.ivy2/cache/com.typesafe.play/play_2.12/jars/play_2.12-2.6.6.jar:play/reference-overrides.conf [错误] /home/user/.ivy2/cache/com.typesafe.play/play-akka-http-server_2.12/jars/play-akka-http-server_2.12-2.6.6.jar:play/reference -overrides.conf

build.sbt

mainClass in assembly := Some("play.core.server.ProdServerStart")
//fullClasspath in assembly += Attributed.blank(PlayKeys.playPackageAssets.value)

(灵感来自https://www.playframework.com/documentation/2.6.6/Deploying#Using-the-SBT-assembly-plugin

(但目前不使用 playPackageAssets)

我的assembly.sbt 只包含addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")

我还尝试了“非标准”配置:

assemblyMergeStrategy in assembly := {
// Building fat jar without META-INF
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
// Take last config file
case PathList(ps @ _*) if ps.last endsWith ".conf" => MergeStrategy.last
case o =>
  val oldStrategy = (assemblyMergeStrategy in assembly).value
  oldStrategy(o)
}

但也没有运气。如何以正确的方式解决这个问题?

【问题讨论】:

    标签: scala playframework sbt sbt-assembly


    【解决方案1】:

    你需要告诉sbt-assembly如何合并这两个reference-overrides.conf配置文件:

    assemblyMergeStrategy in assembly := {
    // Building fat jar without META-INF
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    // Take last config file
    case PathList(ps @ _*) if ps.last endsWith ".conf" => MergeStrategy.last
    case PathList("reference-overrides.conf") => MergeStrategy.concat
    case o =>
      val oldStrategy = (assemblyMergeStrategy in assembly).value
      oldStrategy(o)
    }
    

    【讨论】:

    • 实际上,我认为之前的那一行 endsWith ".conf" 会解决这个问题(是的,我看到它没有连接!)但是唉......谢谢!
    • 仍然给我同样的错误信息:((是的,sbt 已刷新)
    • @Sorona 我认为我们走错了路。试试看:case "reference-overrides.conf" => MergeStrategy.concat
    • 相同,但也许我们正在寻找错误的文件? [warn] Merging 'reference.conf' with strategy 'concat' [error] 1 error was encountered during merge -> 然后显示reference-overrides.conf的路径
    • @Sorona 好的,很好,这意味着它找到了文件。错误说明了什么?
    【解决方案2】:

    我遇到了同样的问题,并通过添加以下内容来解决它。

    case PathList("play", "reference-overrides.conf")  => MergeStrategy.concat
    

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2015-03-01
      • 2015-10-30
      • 2014-12-04
      • 1970-01-01
      • 2015-12-27
      相关资源
      最近更新 更多