你如何将 sbt 项目组合成一个单独的构建?
Posted
技术标签:
【中文标题】你如何将 sbt 项目组合成一个单独的构建?【英文标题】:How do you compose sbt projects into a single build? 【发布时间】:2016-04-02 21:08:09 【问题描述】:关于编写 sbt 项目的问题:
我分叉了一个库项目 (https://github.com/allenai/pipeline),并希望针对使用它的项目来破解它。如果我将它们放在同一个多项目构建中——实际上我更喜欢在本地发布和消费——sbt 将不会读取嵌套 fork 的 project
目录(.scala
文件和插件定义最初所在的位置)。
例如。我尝试,在 build.sbt 中:
lazy val pipeline = (project in file("pipeline"))
lazy val githubCruncher = (project in file("."))
.dependsOn(pipeline)
我收到错误指示目录pipeline/project
被忽略;嵌套项目的build.sbt
本身正在被读取,但sbt 没有在其兄弟project
目录中找到与其旁边定义的内容(因此无法加载构建定义)。
那么,我必须将这两个项目压缩成一个 build.sbt
还是我可以以某种方式优雅地组合这两个项目?我之所以这么问,是因为这也是我从事的其他项目的一个问题,我最终将每个构建定义细节压缩成一个大单体——尽管我更愿意将一些子项目作为独立项目分发,而不是我的自己的开发配置。
【问题讨论】:
【参考方案1】:根据我的经验,项目的 project
目录中的所有内容似乎都被拉入多项目构建 - 需要移动到多项目的 root 下的 project
构建,而引入的项目的build.sbt
不必被压扁——从顶层build.sbt
对其的引用将起作用(除非该引用后面跟着它的定义在顶层build.sbt
)。
来自拉入项目的 Sbt 插件随后将应用于统一的多项目构建,并且需要在适当或需要的情况下使用 disablePlugins
禁用其他子项目。
【讨论】:
下次也可以考虑storm-enroute.com/mecha,或者不太具体的场景local external projects workflow以上是关于你如何将 sbt 项目组合成一个单独的构建?的主要内容,如果未能解决你的问题,请参考以下文章