加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – SBT多项目构建与动态外部项目?

发布时间:2020-12-16 18:48:36 所属栏目:安全 来源:网络整理
导读:假设我们有一个SBT项目栏,它依赖于一些神器foo: val bar = Project('bar',file('.')).settings( libraryDependencies += "com.foo" % "foo" % "1.0.0") 但是,在某些情况下,我想检查foo的来源并让SBT从我的文件系统加载源而不是已发布的工件;这样,我可以对fo
假设我们有一个SBT项目栏,它依赖于一些神器foo:

val bar = Project('bar',file('.')).settings(    
  libraryDependencies += "com.foo" % "foo" % "1.0.0"
)

但是,在某些情况下,我想检查foo的来源并让SBT从我的文件系统加载源而不是已发布的工件;这样,我可以对foo进行本地更改,并立即用bar测试它们,而不必发布任何内容.

val foo = Project('foo',file('foo'))

val bar = Project('bar',file('.')).dependsOn(foo)

我们在bar的根文件夹中有一个spec.json文件,它已指定foo是应该从源使用还是作为工件使用.有没有办法设置我的构建来读取此文件并根据spec.json中的值添加dependsOn或libraryDependencies? “

为libraryDependencies做这个很容易:

val bar = Project('bar',file('.')).settings(    
  libraryDependencies ++= 
    if (containsFoo(baseDirectory.value / "spec.json")) {
      Seq()
    } else {
      Seq("com.foo" % "foo" % "1.0.0")
    }
)

但是,我们找不到任何设置在dependsOn中做任何“动态”的方法,比如读取baseDirectory SettingKey.

解决方法

我们尝试了一些方法,但是我们唯一可以开始工作并且感觉不是难以理解/不可维护的黑客的方法是添加一个隐式类,它向Project添加一个方法,可以在本地或作为工件添加依赖项.

伪代码大纲的实现:

implicit class RichProject(val project: Project) extends AnyVal {

  def withSpecDependencies(moduleIds: ModuleID*): Project = {
    // Read the spec.json file that tells us which modules are on the local file system
    val localModuleIds = loadSpec(project.base / "spec.json")

    // Partition the passed in moduleIds into those that are local and those to be downloaded as artifacts
    val (localModules,artifactModules) = moduleIds.partition(localModuleIds.contains)
    val localClasspathDependencies = toClasspathDependencies(localModules)

    project
      .dependsOn(localClasspathDependencies: _*)
      .settings(libraryDependencies ++= artifactDependencies)
  }
}

实际SBT构建中的使用模式非常简单:

val foo = Project("foo",file("foo")).withSpecDependencies(
  "com.foo" % "bar" % "1.0.0","org.foo" % "bar" % "2.0.0"  
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读