Ответ 1
На самом деле, это довольно легко. Просто переопределите параметр publish
в корневом проекте:
base = file(".")) settings (publish := { }) aggregate(foo, bar)
У меня есть многопроектный 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"))
}
Поскольку root
- это просто виртуальный проект для агрегирования обоих подпроектов, я хотел бы избежать генерации пакетов (и публикации артефактов), но все же генерировать пакет (и публиковать) для обоих подпроектов.
Есть ли простой способ достичь этого?
На самом деле, это довольно легко. Просто переопределите параметр publish
в корневом проекте:
base = file(".")) settings (publish := { }) aggregate(foo, bar)
Вместо того, чтобы играть whac-a-mole, перечисляя конкретные задачи для отключения (publish
, publish-local
, publish-signed
и т.д.), другой вариант - отключить публикацию артефакта в источнике.
publishArtifact := false
Несмотря на отсутствие публикации, я также обнаружил, что мне нужно указать значение publishTo
, чтобы сделать задачу sbt-pgp publish-signed
счастливой. Он нуждается в этом значении, даже если он никогда не использует его.
publishTo := Some(Resolver.file("Unused transient repository", file("target/unusedrepo")))
Следующие работали для меня (это также можно использовать в других подпроектах):
lazy val root = Project(
id = "root",
base = file("."),
aggregate = Seq(foo, bar),
settings = Project.defaultSettings ++ Seq(
publishLocal := {},
publish := {}
)
)
(sbt 0.12.2)
Лучше использовать параметр publishArtifact. Он работает для всех возможных способов публикации, поскольку все они зависят от этой настройки.
Если вам нужно отключить публикацию в определенном проекте, вы можете сделать это, указав название проекта:
publishArtifact in root := false
Здесь root - это определение проекта из исходного вопроса.
Вы можете поместить эту строку в любом месте build.sbt после определения проектов.
Чтобы отключить связанные с пакетом задачи, добавьте
settings(packageBin := { new File("") },
packageSrc := { new File("") },
packageDoc := { new File("") })
к соответствующему Project
(root или нет). "Странность" этого подхода обусловлена packageBin
, и c., Имеющим тип TaskKey[File]
. Я успешно использую этот метод (на уровне корня и в промежуточной агрегации).
Добавить
publish := false
для подпроекта (root project) build.sbt, чтобы избежать публикации