我目前在使用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:为证实我的问题,在src/main/scala
文件夹中,IntelliJ放置文件META-INF / MANIFEST.MF,遵循我选择生成工件的选项。 build.sbt
没有任何特定选项,我只添加了我需要的libraryDependencies
。
答案 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)
}