我有一个项目,其中子项目作为 git 子模块添加到子目录中,每个独立项目都有自己的build.sbt
文件。根项目依赖于并聚合这些子项目。如何覆盖设置值(例如organization
or version
)在那些子项目里面?
lazy val p1 = (project in file("p1"))
.settings(organization := "xyz.abc") // This does not work :(
lazy val root = (project in file("."))
.dependsOn(p1)
.aggregate(p1)
尝试将状态覆盖放入onLoad https://www.scala-sbt.org/release/docs/Howto-Startup.html#How+to+take+an+action+on+startup这是
of type State => State
并在所有项目完成后执行一次
构建并加载。
例如,
lazy val settingsAlreadyOverriden = SettingKey[Boolean]("settingsAlreadyOverriden","Has overrideSettings command already run?")
settingsAlreadyOverriden := false
commands += Command.command("overrideSettings") { state =>
if (settingsAlreadyOverriden.value) {
state
} else {
Project.extract(state).appendWithSession(
Seq(
settingsAlreadyOverriden := true,
subprojectA / organization := "kerfuffle.org",
),
state
)
}
}
onLoad in Global := {
((s: State) => { "overrideSettings" :: s }) compose (onLoad in Global).value
}
settingsAlreadyOverriden
是必要的避免递归onLoad执行#3544 https://github.com/sbt/sbt/issues/3544
相关问题
- SBT:覆盖多重构建 dependentOn/aggregate 项目中的设置 https://stackoverflow.com/questions/40955217/sbt-override-setting-in-multi-build-dependson-aggregate-project
- 如何在 SBT 中的 onLoad 挂钩上应用设置更改? https://stackoverflow.com/questions/27760279/how-can-i-apply-setting-changes-on-onload-hook-in-sbt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)