我有一个为sbt程序集配置的sbt多模块项目。在这个项目中,我想跳过为了加快构建而不打算执行的子项目的胖jar生成。但我不确定这是怎么做的。
答案 0 :(得分:1)
只是不要在不需要它的子模块中包含装配设置。
例如,使用sbt 0.13.5和sbt-assembly 0.11.2,这是一个多模块项目。如果你在root中运行assembly
,那么“app”项目就会变成一个胖罐子。
project/Build.scala
import sbt._
import Keys._
import sbtassembly.Plugin.assemblySettings
object MyApp extends Build {
lazy val root = Project("root", file(".")).aggregate(common, app)
lazy val common = Project("common", file("common"))
lazy val app = Project("app", file("app")).settings(assemblySettings: _*).dependsOn(common)
}
common/src/main/scala/com/example/common/Hello.scala
package com.example.common
object Hello {
def hello(name: String): String = s"Hello, $name"
}
app/src/main/scala/com/example/hello/App.scala
package com.example.hello
import com.example.common.Hello._
object Main extends App {
println(hello(args(0)))
}
答案 1 :(得分:1)
如果使用build.sbt文件,则可以按以下方式禁用模块的程序集插件:
lazy val module = (project in file("module"))
.disablePlugins(sbtassembly.AssemblyPlugin)
.settings(
...
)
这也适用于根模块:
lazy val `project-name` = (project in file("."))
.disablePlugins(sbtassembly.AssemblyPlugin)
.aggregate(`module-1`, `module-2`)
.settings(
...
)
(答案很感谢@tobym在另一个答案中的评论。)
答案 2 :(得分:0)
实际上,sbt设置可以起作用,但是您必须阅读代码才能找到正确的使用方式。通过设置,我可以完成您想要的事情:
assembleArtifact in packageBin := false,
assembleArtifact in assemblyPackageScala := false,
assembleArtifact in assemblyPackageDependency := false,