2

这个 SBT 项目配置我哪里出了问题?

我有一个父项目 A,子项目 B1 和 B2,B2 依赖于项目 B1。

B1编译成功;但是 B2 的编译失败,因为它找不到 B1 的类。

import sbt._

class A(info: ProjectInfo) extends ParentProject(info) with IdeaProject {
  lazy val B1 = project("b1", "B1", new B1(_))
  lazy val B2 = project("b2", "B2", new B2(_))

  class B1(info: ProjectInfo) extends DefaultWebProject(info) with IdeaProject {
    override def unmanagedClasspath = super.unmanagedClasspath +++ extraJars
    def baseDirectory = "lib"
    def extraJars = descendents(baseDirectory, "*.jar")
  }

  class B2(info: ProjectInfo) extends DefaultProject(info) with IdeaProject {
    override def deliverProjectDependencies = 
      B1.projectID :: super.deliverProjectDependencies.toList
  }
}

我真的不确定我是否正确定义了 B2 和 B1 之间的依赖关系。我会使用带有此签名的项目方法指定它:

def project(path: Path, name: String, deps: Project*): Project

...但我需要子项目来混合 IdeaProject 特征。

4

2 回答 2

4

好吧,不过,您正在使用另一个签名:

def project [P <: Project](path : Path, name : java.lang.String, construct : (ProjectInfo) => P, deps : Project*) : P

因此,您需要 B2 声明对 B1 的依赖。

lazy val B2 = project("b2", "B2", new B2(_), B1)

注意:我很确定我会将变量重命名为与此处的类名不同,因为这会让我感到困惑,虽然它应该可以工作,但这看起来很时髦。

于 2010-12-24T16:12:59.673 回答
2

回答我自己的问题,以防其他人发现它有用。这包含在 Tristan Juricek 提供的解决方案中:

import sbt._

class ActiveMinutesProject(info: ProjectInfo) extends ParentProject(info) with IdeaProject {
  lazy val amweb = project("amweb", "ActiveMinutes web application", new AMWeb(_))
  lazy val amadmin = project("amadmin", "ActiveMinutes administration", new AMAdmin(_), amweb)

  class AMWeb(info: ProjectInfo) extends DefaultWebProject(info) with IdeaProject {
    override def unmanagedClasspath = super.unmanagedClasspath +++ extraJars
    def baseDirectory = "lib"
    def extraJars = descendents(baseDirectory, "*.jar")
  }

  class AMAdmin(info: ProjectInfo) extends DefaultProject(info) with IdeaProject {}
}
于 2010-12-25T00:35:01.500 回答