sbt包配置类似于IDEA

时间:2018-06-08 14:46:06

标签: scala intellij-idea sbt

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

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

中所述

由于配置文件存在问题,Akka团队警告使用“胖罐”与Akka项目。因此,我必须使用以下配置配置我的工件的生产:

enter image description here

选择单个模块,指定主类和程序将放置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:为证实我的问题,在src/main/scala文件夹中,IntelliJ放置文件META-INF / MANIFEST.MF,遵循我选择生成工件的选项。 build.sbt没有任何特定选项,我只添加了我需要的libraryDependencies

1 个答案:

答案 0 :(得分:1)

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

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)
}