Подпроект sbt не может найти зависимости

У меня есть дерево проектов, состоящее из трех проектов A, B и C

B зависит от A, а C зависит как от A, так и от B.

A и B проверяются в C lib /, и оба отлично собираются с использованием sbt compile

Однако, когда я компилирую C, сборка B терпит неудачу, жалуясь, что не может найти определенные типы / пакеты:

import org.scalatra.sbt._
import sbt.Keys._
import sbt._

object NwbApiBuild extends Build {
  val Organization = "org.nwb"
  val Name = "NWB API"
  val Version = "0.1.0-SNAPSHOT"
  val ScalaVersion = "2.10.3"
  val ScalatraVersion = "2.3.0"

  lazy val active_slick= Project (
    "active-slick",
    base = file("lib/active-slick")
  )

  lazy val slick_auth= Project (
    "slick-auth",
    base = file("lib/slick-auth")
  )

  lazy val project = Project (
    "root",
    file("."),
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ Seq(
      organization := Organization,
      name := Name,
      version := Version,
      scalaVersion := ScalaVersion,
      resolvers += Classpaths.typesafeReleases,
      libraryDependencies ++= Seq(
        "org.scalatra" %% "scalatra" % ScalatraVersion,
        "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
        "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
        "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container",
        "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),
        "com.typesafe.slick" %% "slick" % "2.0.2",
        "mysql" % "mysql-connector-java" % "5.1.31",
        "joda-time" % "joda-time" % "2.3",
        "org.joda" % "joda-convert" % "1.5",
        "com.github.tototoshi" %% "slick-joda-mapper" % "1.1.0",
        "org.json4s" %% "json4s-native" % "3.2.10",
        "org.json4s"   %% "json4s-jackson" % "3.2.7",
        "c3p0" % "c3p0" % "0.9.1.2"
      )
    )
  ) aggregate(active_slick, slick_auth) dependsOn(active_slick, slick_auth)
}

где у slick auth есть файл сборки

import org.scalatra.sbt._

name := "slick-auth"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.10.3"

val ScalatraVersion = "2.3.0"

lazy val active_slick = Project(
  "active-slick",
  base = file("lib/active-slick")
)

lazy val root = Project(
  "root",
  file("."),
  settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraSettings ++ Seq(
    libraryDependencies ++= Seq(
      "com.typesafe.slick" %% "slick" % "2.0.2",
      "org.slf4j" % "slf4j-nop" % "1.6.4",
      "org.scalatest" %% "scalatest" % "2.2.0" % "test",
      "org.scalatra" %% "scalatra" % ScalatraVersion,
      "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
      "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
      "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container",
      "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),
      "com.typesafe.slick" %% "slick" % "2.0.2",
      "joda-time" % "joda-time" % "2.3",
      "org.joda" % "joda-convert" % "1.5",
      "com.github.tototoshi" %% "slick-joda-mapper" % "1.1.0",
      "org.json4s" %% "json4s-native" % "3.2.10",
      "org.json4s"   %% "json4s-jackson" % "3.2.7",
      "c3p0" % "c3p0" % "0.9.1.2"
    )
  )
).aggregate(active_slick).dependsOn(active_slick)

и active_slick:

name := "active-slick"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "2.0.2",
  "org.slf4j" % "slf4j-nop" % "1.6.4",
  "org.scalatest" %% "scalatest" % "2.2.0" % "test",
  "com.h2database" % "h2" % "1.3.166" % "test"
)

person A.J.Rouvoet    schedule 22.07.2014    source источник
comment
выполнение show slick_auth/allDependencies не показывает никаких зависимостей от проекта slick_auth.   -  person A.J.Rouvoet    schedule 22.07.2014
comment
Более того, show slick_auth / root / allDependencies ДЕЙСТВИТЕЛЬНО показывает необходимые зависимости. Я думал, что проект для file(".") станет дефолтным   -  person A.J.Rouvoet    schedule 22.07.2014
comment
Правильно ли я понимаю, что вы хотите, чтобы A и B были просто проектами, от которых зависит C, а не частью сборки C? Будет ли у вас работать, если вы измените slick_auth на lazy val slick_auth = RootProject(file("lib/slick-auth")) и active_slick на lazy val active_slick = RootProject(file("lib/active-slick"))?   -  person lpiepiora    schedule 22.07.2014
comment
Вау, да! Использование RootProject действительно работает! Возможно, это недооцененная информация в документации ... Если вы опубликуете ее в качестве ответа, я приму ее. Спасибо   -  person A.J.Rouvoet    schedule 23.07.2014


Ответы (1)


Если вы хотите использовать другой проект в качестве зависимости (а не его двоичную версию), вы можете использовать ссылки на проекты. Есть два типа ссылок, ProjectRef или более простая версия ProjectRef, то есть RootProject.

Вам следует изменить определение сборки, указав slick_auth как

lazy val slick_auth = RootProject(file("lib/slick-auth"))

и active_slick как

lazy val active_slick = RootProject(file("lib/active-slick"))
person lpiepiora    schedule 23.07.2014