dependsOn
如果在顶层模块上调用所有子模块,则以正确的顺序进行编译。
但是publishLocal
命令会忽略这些子模块。
在给定多模块sbt项目的情况下,是否有任何方法可以使它以正确的顺序编译+ publishLocal子模块?
答案 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>