Зависимости подпроектов в SBT

У меня странная проблема с подпроектами SBT, которая, я думаю, связана с зависимостью. Вот моя установка:

  • У меня есть проект SBT с двумя подпроектами A и B.
  • A содержит класс и сопутствующий объект MyA
  • В зависит от А.
  • B содержит объект MyB, у которого есть основной метод.

Когда я пытаюсь выполнить MyB из приглашения SBT, я получаю NoSuchMethodError на MyA. Это не ClassNotFoundException, но, возможно, это происходит потому, что он видит класс MyA в пути к классам, но не объект MyA.

В качестве проверки работоспособности я удалил подпроект B и переместил его исходный код в дерево исходного кода A. Когда я запускаю MyB из приглашения SBT, он работает, как и ожидалось.

Кто-нибудь сталкивался с этим, или я делаю что-то явно не так?

Вот конфигурация моего проекта:

class MyProject(info: ProjectInfo) extends ParentProject(info) {

  lazy val a = project("a", "a", new AProject(_))
  lazy val b = project("b", "b", new BProject(_), a)

  object Dependencies {
    lazy val scalaTest = "org.scalatest" % "scalatest_2.9.0" % "1.4.1" % "test"
  }

  class AProject(info: ProjectInfo) extends DefaultProject(info) with AutoCompilerPlugins {
    val scalaTest = Dependencies.scalaTest
    val continuationsPlugin = compilerPlugin("org.scala-lang.plugins" % "continuations" % "2.9.0")
    override def compileOptions = super.compileOptions ++ compileOptions("-P:continuations:enable") ++ compileOptions("-unchecked")
  }

  class BProject(info: ProjectInfo) extends DefaultProject(info)

}

person earldouglas    schedule 18.05.2011    source источник
comment
ОБНОВЛЕНИЕ: похоже, это ошибка компиляции. Я скомпилировал комбинированное дерево исходников A + B, затем скопировал только классы B в каталог b/target/..., и MyB работает правильно.   -  person earldouglas    schedule 18.05.2011


Ответы (1)


Оказалось, что возникла проблема с включением плагина продолжений в проекте B. Вот моя рабочая конфигурация:

class MyProject(info: ProjectInfo) extends ParentProject(info) {

  lazy val a = project("a", "a", new AProject(_))
  lazy val b = project("b", "b", new BProject(_), a)

  object Dependencies {
    lazy val scalaTest = "org.scalatest" % "scalatest_2.9.0" % "1.4.1" % "test"
  }

  class AProject(info: ProjectInfo) extends DefaultProject(info) with AutoCompilerPlugins {
    val scalaTest = Dependencies.scalaTest
    val continuationsPlugin = compilerPlugin("org.scala-lang.plugins" % "continuations" % "2.9.0")
    override def compileOptions = super.compileOptions ++ compileOptions("-P:continuations:enable") ++ compileOptions("-unchecked")
  }

  class BProject(info: ProjectInfo) extends DefaultProject(info) with AutoCompilerPlugins {
    override def compileOptions = super.compileOptions ++ compileOptions("-P:continuations:enable") ++ compileOptions("-unchecked")
  }

}
person earldouglas    schedule 18.05.2011