Взаимозависимости субпроектов SBT - PullRequest
2 голосов
/ 24 декабря 2010

Где я ошибся с этой конфигурацией проекта 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.

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

Ну, вы используете другую подпись, хотя:

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)

Примечание: я почти уверен, что переименую переменные, чтобы они не совпадали с именами классов, потому что это просто смущает меня, и хотя это должно сработать, это кажется просто забавным.

2 голосов
/ 25 декабря 2010

Отвечая на мой вопрос на случай, если кто-то найдет это полезным.Это складывает в решении, предоставленном Тристан 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 {}
}
...