SBT汇编跳过一些子项目

SBT汇编跳过一些子项目,sbt,Sbt,我有一个sbt多模块项目,为sbt组装配置。在这个项目中,为了加快构建速度,我想跳过那些不打算执行的子项目的fatjar生成。但我不确定这是如何做到的。只是不要在不需要的子模块中包含程序集设置 例如,使用sbt 0.13.5和sbt assembly 0.11.2,这里是一个多模块项目。如果在根目录下运行assembly,则只需将“app”项目制作成一个胖jar project/Build.scala 导入sbt_ 导入密钥_ 导入sbtasembly.Plugin.assembly设置 对象M

我有一个sbt多模块项目,为sbt组装配置。在这个项目中,为了加快构建速度,我想跳过那些不打算执行的子项目的fatjar生成。但我不确定这是如何做到的。

只是不要在不需要的子模块中包含程序集设置

例如,使用sbt 0.13.5和sbt assembly 0.11.2,这里是一个多模块项目。如果在根目录下运行
assembly
,则只需将“app”项目制作成一个胖jar

project/Build.scala

导入sbt_
导入密钥_
导入sbtasembly.Plugin.assembly设置
对象MyApp扩展构建{
lazy val root=项目(“根”,文件(“.”)。聚合(通用,应用)
lazy val common=项目(“公共”,文件(“公共”))
lazy val app=项目(“应用程序”、文件(“应用程序”))。设置(汇编设置:*)。依赖项(通用)
}
common/src/main/scala/com/example/common/Hello.scala

package com.example.common
对象你好{
def hello(name:String):String=s“hello,$name”
}
app/src/main/scala/com/example/hello/app.scala

package com.example.hello
导入com.example.common.Hello_
对象主应用程序{
println(hello(args(0)))
}

如果使用build.sbt文件,则可以按如下方式禁用模块的程序集插件:

lazy val module=(文件(“模块”)中的项目)
.disablePlugins(sbtassembly.AssemblyPlugin)
.设置(
...
)
这也适用于根模块:

lazy val`project name`=(文件(“.”)中的项目)
.disablePlugins(sbtassembly.AssemblyPlugin)
.aggregate(`module-1`、`module-2`)
.设置(
...
)

(由于@tobym在另一个答案中的评论,我们找到了答案。)

实际上,sbt设置确实有效,但您必须阅读代码才能找到正确的使用方法。通过设置以下各项,我可以实现您的目标:

assembleArtifact in packageBin := false,
assembleArtifact in assemblyPackageScala := false,
assembleArtifact in assemblyPackageDependency := false,

但这是一个自动插件,所以我不会在任何项目中添加程序集设置。我也想知道,基本上,根/程序集解析为所有子模块创建单独的jar包,而不是一个包含所有子项目依赖项的根jar包。它基本上为构建定义中的每个项目强制执行程序集设置。有一个设置
assembleArtifact:=false
,但它似乎没有任何效果。它仍然会组装项目。您可以使用
(someProject)禁用插件。disablePlugins(sbtassembly.AssemblyPlugin)
@tobym您的上一条评论可能比原始答案更好地回答了这个问题,您可能希望将其作为第一个选项包含在主答案中。无论如何,这对我很有帮助,谢谢!