2

我似乎无法正确配置 SBT 来解决我的项目所依赖的 RootProject 的传递依赖关系。问题似乎是解决方案。我已经能够用一个非常简单的结构复制它。请参阅下面的代码。

在 common/ 我可以运行sbt console,它将解决依赖关系,我可以使用它。但是在 proj/ 内部,相同的命令失败了。与UNRESOLVED DEPENDENCIES. 但我的edofic snapshots解析器未列在尝试过的解析器中。不知怎的,它没有被捡起来。如果我手动将解析器添加到 Build.scala 中,它会起作用,但这违背了传递依赖的目的。

├── common
│   └── build.sbt
└── proj
    └── project
        └── Build.scala

常见/build.sbt

scalaVersion := "2.10.0"

resolvers += "edofic snapshots" at "http://edofic.github.com/repository/snapshots"

libraryDependencies += "com.edofic" % "reactivemacros_2.10.0" % "0.1-SNAPSHOT"

项目/项目/Build.scala

import sbt._
import Keys._

object BarBuild extends Build {
  val common = RootProject(file("../common"))

  val main = Project(id = "main", base = file(".")).settings(
    scalaVersion := "2.10.0"
  ) dependsOn common
}

只是为了说明清楚:我想为“common”设置单独的 SBT 配置,并且我不想在本地发布它——我想让 SBT 在需要时处理增量重新编译。RootProject 是不是适合这项工作的工具?

4

1 回答 1

0

这是一个对我有用的解决方案,但它可能会破坏其他东西:
proj/project/Build.scala中,在您的项目定义中添加一个“代表”参数,如下所示:

val main = Project(id = "main", base = file("."), 
                   delegates = common :: Nil).settings(
  scalaVersion := "2.10.0"
) dependsOn common

我认为这可能会导致您的“主”项目从“通用”项目中获取所有配置,所以我不确定可能有什么副作用。因此,我为我的项目选择的解决方案是拥有一个“配置”项目,该项目具有我所有项目的通用配置,并在该项目中使用“委托”,以便我可以控制正在选择的配置。

于 2013-04-10T16:55:21.230 回答