如何在多模块构建中禁用根聚合模块的打包和发布任务?

par*_*tic 37 scala sbt

我有一个多项目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)

  • 虽然这有效但它仍然创建并提供ivy.xml文件(至少在做本地发布时) (8认同)
  • 我不使用sbt-pgp,但如果没有`publishTo`虚设置,它仍然会失败; 这是sbt 0.13.8.我认为这只是交叉建设时的一个问题,但我不确定. (2认同)

Dan*_*ral 29

其实,这很容易的.只需覆盖publish根项目中的设置:

base = file(".")) settings (publish := { }) aggregate(foo, bar)
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的.至少当我尝试`publish-local`时,它仍然为root项目构建/发布一个空jar.(我使用sbt 0.11.2) (2认同)
  • 我把样本构建在[github]上(https://github.com/dcsobral/q8786708).明确地执行`publish-local`或`publish`只能为子项目做些什么. (2认同)

0__*_*0__ 9

以下对我有用(这也可用于其他子项目):

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)

  • 这不适用于publishSigned和publishLocalSigned-最好如上面答案中所述关闭工件的发布。 (2认同)
  • @MikeAllen因为答案的顺序发生了变化,所以引用一个人的名字比“上面”更好。 (2认同)

Die*_*las 7

SBT 的最新版本包含跳过发布阶段的设置,详细信息请参见此处

publish / skip := true
Run Code Online (Sandbox Code Playgroud)


Ale*_*lev 6

最好使用publishArtifact设置.它适用于所有可能的发布方式,因为它们都依赖于此设置.

如果您需要在某个项目中关闭发布,可以通过提供项目名称来实现:

publishArtifact in root := false
Run Code Online (Sandbox Code Playgroud)

是从原来的问题的项目定义.

在定义项目之后,您可以将此行放在build.sbt中的任何位置.