マルチプロジェクトのSBTプロジェクトがあります。これは、SBTドキュメントの例のようになります。
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
は両方のサブプロジェクトを集約するための単なる仮想プロジェクトであるため、パッケージの生成(およびアーティファクトの公開)は避けたいが、両方のサブプロジェクトのパッケージを生成(および公開)したい。
それを達成する簡単な方法はありますか?
実際、それはisかなり簡単です。ルートプロジェクトのpublish
の設定を上書きするだけです。
base = file(".")) settings (publish := { }) aggregate(foo, bar)
無効にする特定のタスク(publish
、publish-local
、publish-signed
など)を一覧表示してモグラたたきを再生する代わりに、ソースでのアーティファクトの公開をオフにすることもできます。
publishArtifact := false
公開は行われていませんが、sbt-pgpのpublish-signed
タスクを満足させるには、publishTo
値を指定する必要があることもわかりました。使用しない場合でも、この値が必要です。
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の任意の場所に配置できます。
Sbt 1.xの場合、publish := { }
の設定は機能しませんでした。代わりに、skip in publish
を使用できます。
base = file(".")) settings (skip in publish := true) aggregate(foo, bar)
https://github.com/sbt/sbt/issues/3136 を参照してください
パッケージ関連のタスクを無効にするには、
settings(packageBin := { new File("") },
packageSrc := { new File("") },
packageDoc := { new File("") })
対応するProject
(ルートかどうか)に。このアプローチの「奇妙さ」は、packageBin
、&c。がTaskKey[File]
型であるためです。私はこの手法をうまく使用しています(ルートレベルおよび中間集約で)。
SBTの最近のバージョンには、詳細に説明されているように、公開フェーズをスキップする設定が含まれています ここ 。
skip in publish := true