【问题标题】:sbt share dependencies across projectssbt 跨项目共享依赖
【发布时间】:2015-12-12 20:11:11
【问题描述】:

我正在寻找一种跨项目(但不是子项目)共享配置(例如依赖项)的方法。

我想知道是否可以在一些 sbt 项目中集中依赖关系并从其他几个 sbt 项目中获取这些依赖项。

如果没有简单的方法,我是否应该考虑开发一个插件来暴露这些依赖关系?

【问题讨论】:

    标签: scala dependencies sbt


    【解决方案1】:

    也许开发一个包含此设置的插件是最好的解决方案。 然后这个插件将成为一个独立的项目,并且可以通过使用 addSbtPlugin(...) 跨项目重用。 您可以使用本地存储库来托管(构建)插件。

    【讨论】:

    • 一个 sbt 插件不会削减它,因为您需要在每次更改或更新共享版本时管理每个 sbt 构建中的插件版本。我敢打赌你会忘记这样做的。这相当于手动更新版本而不是共享它们。
    • 如果共享配置选项经常改变,插件是一个糟糕的解决方案。但对于相当静态的设置(任务定义、公共依赖集),它可能是一个很好的解决方案。您还可以对插件进行版本控制 - 从而为您的共享设置提供不同的快照。
    【解决方案2】:

    我的想法是将所有常见的依赖项发布到 Maven 存储库。

    不过,我更喜欢多模块项目机制。下面是一个例子(播放):

    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(
      ...
     )
    )
    

    【讨论】:

    • 谢谢,我也喜欢多模块项目,但有些项目太大了。
    猜你喜欢
    • 2017-08-09
    • 2018-07-14
    • 2013-06-15
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多