【问题标题】:Subproject dependencies in SBTSBT 中的子项目依赖项
【发布时间】:2011-08-27 18:27:37
【问题描述】:

我对 SBT 子项目有一个奇怪的问题,我认为这与依赖关系有关。这是我的设置:

  • 我有一个包含两个子项目 A 和 B 的 SBT 项目。
  • A 包含一个类和伴随对象MyA
  • B 依赖于 A。
  • B 包含一个对象MyB,它有一个main 方法。

当我尝试从 SBT 提示符执行 MyB 时,我在 MyA 上得到一个 NoSuchMethodError。这不是ClassNotFoundException,但可能是因为它在类路径上看到MyA 类,但看不到MyA 对象。

作为健全性检查,我删除了 B 子项目并将其源代码移到 A 源代码树中。当我从 SBT 提示符运行 MyB 时,它按预期工作。

有没有人遇到过这种情况,或者我做错了什么?

这是我的项目配置:

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)

}

【问题讨论】:

  • 更新:这似乎是一个编译错误。我编译了一个组合的A + B源树,然后只将B类复制到b/target/...目录中,MyB运行正常。

标签: scala dependencies sbt


【解决方案1】:

事实证明,在项目 B 上启用 continuation 插件时出现问题。这是我的工作配置:

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")
  }

}

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2018-06-28
    • 2014-06-24
    • 1970-01-01
    • 2017-10-17
    • 2016-12-18
    相关资源
    最近更新 更多