2011-05-18 202 views
1

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

  • 我有两个子项目A中的SBT项目和B.
  • A包含一类和同伴对象MyA
  • B依赖于A.
  • B包含的对象MyB这有一个主要方法。

当我尝试从SBT提示符下执行MyB,我得到一个MyANoSuchMethodError。这不是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) 

} 
+0

UPDATE:这似乎是编译错误。我编译了一个组合的A + B源代码树,然后仅将B类复制到'b/target/...'目录中,并且'MyB'正确运行。 – earldouglas 2011-05-18 18:12:50

回答

2

原来一直使延续插件项目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") 
    } 

}