我有一个多项目SBT项目,看起来像SBT doc上的例子:
import sbt._
import Keys._
object HelloBuild extends Build {
lazy val root = Project(id = "hello",
base = file(".")) aggregate(foo, bar)
lazy val foo = Project(id = "hello-foo",
base = file("foo"))
lazy val bar = Project(id = "hello-bar",
base = file("bar"))
}
Run Code Online (Sandbox Code Playgroud)
因为root
它只是一个聚合两个子项目的虚拟项目,我想避免包生成(和工件发布),但仍然为两个子项目生成包(和发布).
有没有一种简单的方法来实现它?
Ric*_*rty 53
而不是通过列出具体任务玩打地鼠禁用(publish
,publish-local
,publish-signed
等),另一种选择是关闭神器发布源头.
publishArtifact := false
Run Code Online (Sandbox Code Playgroud)
即使没有发布,我也发现我需要提供一个publishTo
值来让sbt-pgp的publish-signed
任务开心.它需要这个值,即使它从未使用它.
publishTo := Some(Resolver.file("Unused transient repository", file("target/unusedrepo")))
Run Code Online (Sandbox Code Playgroud)
Dan*_*ral 29
其实,这是很容易的.只需覆盖publish
根项目中的设置:
base = file(".")) settings (publish := { }) aggregate(foo, bar)
Run Code Online (Sandbox Code Playgroud)
以下对我有用(这也可用于其他子项目):
lazy val root = Project(
id = "root",
base = file("."),
aggregate = Seq(foo, bar),
settings = Project.defaultSettings ++ Seq(
publishLocal := {},
publish := {}
)
)
Run Code Online (Sandbox Code Playgroud)
(sbt 0.12.2)
最好使用publishArtifact设置.它适用于所有可能的发布方式,因为它们都依赖于此设置.
如果您需要在某个项目中关闭发布,可以通过提供项目名称来实现:
publishArtifact in root := false
Run Code Online (Sandbox Code Playgroud)
有根是从原来的问题的项目定义.
在定义项目之后,您可以将此行放在build.sbt中的任何位置.