关于 scala:sbt 跨项目共享依赖 | 珊瑚贝

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/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?