SBT&x27;德彭森';但对于当地的出版业来说

SBT&x27;德彭森';但对于当地的出版业来说,sbt,Sbt,dependsOn在顶级模块上调用所有子模块时,将按正确的顺序编译所有子模块 但是publishLocal命令忽略这些子模块 对于一个多模块sbt项目,有没有办法让它按照正确的顺序编译并发布子模块?一种解决方案是定义一系列专门用于库的设置,例如,commonLibrarySettings,然后通过设置(commonLibrarySettings)在每个可发布的子模块上设置这些设置。例如: lazy val commonSettings = Seq( organization := "com.

dependsOn
在顶级模块上调用所有子模块时,将按正确的顺序编译所有子模块

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


对于一个多模块sbt项目,有没有办法让它按照正确的顺序编译并发布子模块?

一种解决方案是定义一系列专门用于库的设置,例如,
commonLibrarySettings
,然后通过
设置(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)

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

但是,如果您的设置更复杂,并且您希望发布一些子项目,但不想发布其他子项目,或者在另一个子项目中聚合一些子项目,那么请按照@mario galic:common settings+
.aggregate
中的答案进行操作