这个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特征中。
答案 0 :(得分: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)
注意:我很确定我会在这里将变量重命名为与类名不同,因为这只会让我感到困惑,虽然它应该有效,但这看起来很时髦。
答案 1 :(得分: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 {}
}