Scala 如何在多项目上进行sbt组装

Scala 如何在多项目上进行sbt组装,scala,jar,sbt,Scala,Jar,Sbt,我在为我下载的开源项目构建胖jar时遇到了问题。正如我运行sbt assembly时一样,每个子项目都会创建一个jar,但包含所有scala lib类和log4j类(即使在我在依赖项行中添加了“提供”之后)。我看不到assembly.sbt或任何其他组装说明。当我从另一个工作项目中移动assembly.sbt时,我会得到一个 error: not found: type MergeStrategy val defaultMergeStrategy: String => MergeStrat

我在为我下载的开源项目构建胖jar时遇到了问题。正如我运行sbt assembly时一样,每个子项目都会创建一个jar,但包含所有scala lib类和log4j类(即使在我在依赖项行中添加了“提供”之后)。我看不到assembly.sbt或任何其他组装说明。当我从另一个工作项目中移动assembly.sbt时,我会得到一个

error: not found: type MergeStrategy
val defaultMergeStrategy: String => MergeStrategy = {
整个assembly.sbt是

import AssemblyKeys._ // put this at the top of the file

assemblySettings

val defaultMergeStrategy: String => MergeStrategy = {
    case _ => MergeStrategy.first
}

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
    case m if m.toLowerCase.matches("meta-inf/.*\\.sf$") => MergeStrategy.discard
    case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
    case _ => MergeStrategy.first
  }
}
import AssemblyKeys.\u//将其放在文件的顶部
装配设置
val defaultMergeStrategy:String=>MergeStrategy={
案例=>MergeStrategy.first
}
程序集mergeStrategy.discard中的mergeStrategy
案例路径列表(“META-INF”、“MANIFEST.MF”)=>MergeStrategy.discard
案例=>MergeStrategy.first
}
}

有人能帮我修一下吗?为什么assembly.sbt适用于我的所有其他项目,但在这里失败了?这是删除scala lib和log4j类的另一种方法吗?

您可以发布一个到您的开源项目的链接吗?sbt组件版本是什么?它的。根据您的评论,我检查了plugin.sbt文件,发现sbt程序集插件丢失。我在addSbtPlugin(“com.eed3si9n”%”sbt assembly“%”0.9.0)中添加了scala库,但没有用,我仍然将scala库捆绑到远jars中。请尝试使用中的
includeScala=false
。你可能会在那里发现其他一些关于汇编的棘手的东西:)没有什么坏处,但没有什么不同。你能发布一个链接到你的开源项目吗?sbt组件版本是什么?它的。根据您的评论,我检查了plugin.sbt文件,发现sbt程序集插件丢失。我在addSbtPlugin(“com.eed3si9n”%”sbt assembly“%”0.9.0)中添加了scala库,但没有用,我仍然将scala库捆绑到远jars中。请尝试使用中的
includeScala=false
。你们也可以在那个里找到其他的组装技巧:)并没有伤害,但并没有影响。