sbt share dependencies across projects
我正在寻找一种跨项目(但不是子项目)共享配置(例如依赖项)的方法。
我想知道是否可以在一些 sbt 项目中集中依赖关系并从其他几个 sbt 项目中获取它们。
如果没有简单的方法,我是否应该考虑开发一个插件来暴露这些依赖关系?
也许开发一个包含此设置的插件是最好的解决方案。
这个插件将成为一个独立的项目,并且可以通过使用 addSbtPlugin(…) 跨项目重用。
您可以使用本地存储库来托管(构建)插件。
- sbt 插件不会削减它,因为每当您更改或更新共享版本时,您都需要在每个 sbt 构建中管理插件的版本。我打赌你会忘记这样做的。这相当于手动更新版本而不是共享它们。
- 如果共享配置选项经常更改,则插件是一个糟糕的解决方案。但是对于相当静态的设置(任务定义、公共依赖集),它可能是一个很好的解决方案。您还可以对插件进行版本控制 – 从而提供共享设置的不同快照。
我的想法是将所有常见的依赖项发布到 Maven 存储库。
不过,我更喜欢多模块项目机制。下面是一个例子(播放):
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
lazy val commonSettings = Seq(
version :=“1.0”, organization :=“abc”, scalaVersion :=“2.11.6”, resolvers ++= Seq( … ), … ) lazy val root = (project in file(“.”)).enablePlugins(PlayScala) .settings(commonSettings: _*) .aggregate(core, dao, models) .settings( name :=“root”, version :=“1.0”, libraryDependencies ++= Seq( … ) ) lazy val core = (project in file(“./modules/core”)) dependsOn dao settings(commonSettings: _*) settings( name :=“core”, libraryDependencies ++= Seq( … ) ) lazy val dao = (project in file(“./modules/dao”)) dependsOn models settings(commonSettings: _*) settings( name :=“dao”, libraryDependencies ++= Seq( … ) ) lazy val models = (project in file(“./modules/models”)) settings(commonSettings: _*) settings( name:=“models”, libraryDependencies ++= Seq( … ) ) |
- 谢谢,我也喜欢多模块项目,但有些项目太大了。
来源:https://www.codenong.com/32605228/