SBT装配跳过一些子项目

mon*_*ack 10 sbt

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

tob*_*bym 2

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

例如,使用 sbt 0.13.5 和 sbt-assemble 0.11.2,这是一个多模块项目。如果你assembly在 root 下运行,只有“app”项目会被制作成一个 fat jar。

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)

}
Run Code Online (Sandbox Code Playgroud)

common/src/main/scala/com/example/common/Hello.scala

package com.example.common

object Hello {
  def hello(name: String): String = s"Hello, $name"
}
Run Code Online (Sandbox Code Playgroud)

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)))
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 `(someProject).disablePlugins(sbt assembly.AssemblyPlugin)` 禁用插件 (25认同)
  • @tobym您最后的评论可能比您原来的答案更好地回答了问题,您可能希望将其作为第一个选项包含在主要答案中。无论如何,这对我来说是最有帮助的,谢谢! (5认同)
  • 但它是一个自动插件,所以我不会将程序集设置添加到任何项目中。 (3认同)