SBT装配跳过一些子项目

时间:2015-01-20 10:30:29

标签: sbt

我有一个为sbt程序集配置的sbt多模块项目。在这个项目中,我想跳过为了加快构建而不打算执行的子项目的胖jar生成。但我不确定这是怎么做的。

3 个答案:

答案 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,