web-dev-qa-db-ja.com

マルチモジュールビルドでルートアグリゲートモジュールのパッケージおよび公開タスクを無効にする方法は?

マルチプロジェクトの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は両方のサブプロジェクトを集約するための単なる仮想プロジェクトであるため、パッケージの生成(およびアーティファクトの公開)は避けたいが、両方のサブプロジェクトのパッケージを生成(および公開)したい。

それを達成する簡単な方法はありますか?

38
paradigmatic

実際、それはisかなり簡単です。ルートプロジェクトのpublishの設定を上書きするだけです。

base = file(".")) settings (publish := { }) aggregate(foo, bar)
30

無効にする特定のタスク(publishpublish-localpublish-signedなど)を一覧表示してモグラたたきを再生する代わりに、ソースでのアーティファクトの公開をオフにすることもできます。

publishArtifact := false

公開は行われていませんが、sbt-pgpのpublish-signedタスクを満足させるには、publishTo値を指定する必要があることもわかりました。使用しない場合でも、この値が必要です。

publishTo := Some(Resolver.file("Unused transient repository", file("target/unusedrepo")))
55
Rich Dougherty

以下は私のために働きました(これは他のサブプロジェクトでも使用できます):

lazy val root = Project(
  id = "root",
  base = file("."),
  aggregate = Seq(foo, bar),
  settings = Project.defaultSettings ++ Seq(
    publishLocal := {},
    publish := {}
  )
)

(sbt 0.12.2)

9
0__

publishArtifact設定を使用することをお勧めします。それらはすべてこの設定に依存しているため、可能なすべての公開方法で機能します。

特定のプロジェクトで公開をオフにする必要がある場合は、プロジェクト名を指定することでオフにできます。

publishArtifact in root := false

rootは、元の質問からのプロジェクト定義です。

プロジェクトを定義した後、この行をbuild.sbtの任意の場所に配置できます。

6
Alexey Kiselev

Sbt 1.xの場合、publish := { }の設定は機能しませんでした。代わりに、skip in publishを使用できます。

base = file(".")) settings (skip in publish := true) aggregate(foo, bar)

https://github.com/sbt/sbt/issues/3136 を参照してください

3
amuttsch

パッケージ関連のタスクを無効にするには、

settings(packageBin := { new File("") }, 
         packageSrc := { new File("") }, 
         packageDoc := { new File("") })

対応するProject(ルートかどうか)に。このアプローチの「奇妙さ」は、packageBin、&c。がTaskKey[File]型であるためです。私はこの手法をうまく使用しています(ルートレベルおよび中間集約で)。

3

SBTの最近のバージョンには、詳細に説明されているように、公開フェーズをスキップする設定が含まれています ここ

skip in publish := true