【问题标题】:sbt package configuration similar to IDEAsbt 包配置类似于 IDEA
【发布时间】:2018-06-12 00:10:26
【问题描述】:

我目前在使用 sbt 打包我的 Scala 应用程序时遇到问题。情况是这样的。

到目前为止,在开发阶段,我使用 IntelliJ IDEA 编译和创建可用于部署的 jar 工件。我正在使用 AKKA 包,如 this answer

中所述

由于配置文件存在问题,Akka 团队就在 Akka 项目中使用“胖罐子”发出警告。因此,我不得不使用这些配置来配置我的工件的生产:

选择一个模块,指定一个主类和程序将放置 MANIFEST.MF 的文件夹。

一切正常,程序与所有其他 jar 一起生成 jar,我设法在开发中启动 jar。

在尝试自动化该过程时,我开始使用 sbt,尝试以与使用 IntelliJ IDEA 相同的方式生成工件,但我找不到任何可以模仿 IntelliJ 所做的配置。

特别是尝试运行sbt package 我什至得到了这个异常:

[error] java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF

有什么方法可以正确配置 sbt package 使其行为与 IntelliJ 相同?

PS:为了证实我的问题,IntelliJ 在 src/main/scala 文件夹中放置了 META-INF/MANIFEST.MF 文件,遵循我选择生成工件的选项。 build.sbt 没有任何特定选项,我只添加了我需要的 libraryDependencies

【问题讨论】:

    标签: scala intellij-idea sbt


    【解决方案1】:

    要解决 Akka 中的 reference.conf 问题,一种解决方案是在创建 fat jar 时附加所有这些文件。

    sbt-assembly 插件通过指定 MergeStrategy 来实现这一点。例如:

    assemblyMergeStrategy in assembly := {
      case "application.conf" => MergeStrategy.concat
      case "reference.conf"=> MergeStrategy.concat
      case x =>
        val oldStrategy = (assemblyMergeStrategy in assembly).value
        oldStrategy(x)
    }
    

    【讨论】:

    • 非常感谢,这解决了 Akka 的问题,我已经设法用 sbt 程序集创建了一个可以工作的 fat jar。
    猜你喜欢
    • 2013-03-22
    • 2012-03-15
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2017-02-19
    • 2018-05-07
    • 2012-01-29
    • 2016-01-11
    相关资源
    最近更新 更多