SBT'dependsOn',但用于publishLocal

时间:2018-08-22 08:37:25

标签: sbt

dependsOn如果在顶层模块上调用所有子模块,则以正确的顺序进行编译。

但是publishLocal命令会忽略这些子模块。

在给定多模块sbt项目的情况下,是否有任何方法可以使它以正确的顺序编译+ publishLocal子模块?

2 个答案:

答案 0 :(得分:0)

一种解决方案是定义一系列专用于库的设置,例如commonLibrarySettings,然后通过.settings(commonLibrarySettings)在每个可发布子模块上设置这些设置。例如:

lazy val commonSettings = Seq(
  organization := "com.example",
  version := "0.1.0-SNAPSHOT",
  scalaVersion := "2.12.6",
  ...
)

lazy val commonLibrarySettings = Seq(
  publishArtifact := true,
  publishArtifact in Test := false,
  publishTo in ThisBuild := Some(if (isSnapshot.value) Opts.resolver.sonatypeSnapshots else Opts.resolver.sonatypeReleases),
  ...
)

lazy val root = (project in file("."))
  .aggregate(core, submodule1, submodule2)

lazy val core = (project in file("core"))
  .settings(commonSettings)

lazy val submodule1 = (project in file("submodule1")) // publishable sub-module
  .settings(commonSettings)
  .settings(commonLibrarySettings)

lazy val submodule2 = (project in file("submodule2")) // publishable sub-module
  .settings(commonSettings)
  .settings(commonLibrarySettings)

答案 1 :(得分:0)

我认为一个简单的解决方案就是运行*/publishLocal,它应该在所有子项目上聚合(发布也取决于编译,因此compile + publish是多余的)。

但是,如果您的设置较为复杂,并且您想发布一些子项目,而不是其他子项目,或者将某些子项目聚合到另一个子项目中,请遵循@ mario-galic的回答:通用设置+ .aggregate。 / p>