如何配置SBT的publishLocal仅本地发布变更的子模块?
仅发布变更子项目的publishLocal配置方法
sbt 默认支持增量构建,publishLocal 本身会自动跳过未变更的子项目,你也可以通过更明确的方式精准控制:
直接使用内置命令组合
运行以下命令,即可只发布自上次构建以来有文件修改、依赖变更的子项目:sbt "changed publishLocal"changed任务会自动检测所有变更项,仅对这些子项目执行publishLocal。自定义任务(可选,更灵活)
如果需要频繁使用该功能,可在build.sbt中添加自定义任务:lazy val publishLocalChanged = taskKey[Unit]("仅发布变更的子项目到本地仓库") publishLocalChanged := { val changedProjects = (changed in ThisBuild).value changedProjects.foreach { proj => (publishLocal in proj).value } }之后只需运行:
sbt publishLocalChanged
注意事项
- 变更检测基于源文件修改时间、内容哈希,以及项目依赖链的变更。如果子项目A依赖子项目B,当B变更时,A也会被触发发布(因为A的构建依赖B的输出)。
- 如果子项目依赖外部生成的资源文件,需要确保这些文件被加入sbt的监控范围,可通过配置
watchSources实现,避免漏发布变更内容。
内容的提问来源于stack exchange,提问作者MawrCoffeePls
相关产品推荐
相关产品推荐

