【发布时间】:2015-03-18 13:05:53
【问题描述】:
我有一个为 sbt 程序集配置的 sbt 多模块项目。在这个项目中,我想跳过不打算执行的子项目的胖 jar 生成,以加快构建速度。但我不确定这是怎么做到的。
【问题讨论】:
标签: sbt
我有一个为 sbt 程序集配置的 sbt 多模块项目。在这个项目中,我想跳过不打算执行的子项目的胖 jar 生成,以加快构建速度。但我不确定这是怎么做到的。
【问题讨论】:
标签: sbt
如果您使用 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 在另一个答案中的评论找到答案。)
【讨论】:
只是不要在不需要的子模块中包含程序集设置。
例如,使用 sbt 0.13.5 和 sbt-assembly 0.11.2,这里是一个多模块项目。如果你在 root 下运行assembly,只会将“app”项目制作成一个胖 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)
}
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)))
}
【讨论】:
assembleArtifact := false,但它似乎没有任何效果。它仍在组装项目。
(someProject).disablePlugins(sbtassembly.AssemblyPlugin)禁用插件
实际上,sbt 设置确实可以工作,但是您必须阅读代码才能找到正确的使用方法。我能够通过设置完成你想要的:
assembleArtifact in packageBin := false,
assembleArtifact in assemblyPackageScala := false,
assembleArtifact in assemblyPackageDependency := false,
【讨论】: