2011-11-03 62 views
8

我建立一个简单的斯卡拉项目,SBT 0.11。如何设置管理依赖于SBT 0.11项目有Build.scala

所有的代码文件都在~/MyProject/src/main/scala/

~/MyProject/build.sbt在以下


name := "MyProject" 

version := "1.0" 

scalaVersion := "2.9.1" 

libraryDependencies ++= Seq(
    "mysql" % "mysql-connector-java" % "5.1.+", 
    "c3p0" % "c3p0" % "0.9.1.2", 
    "org.apache.commons" % "commons-lang3" % "3.0.1", 
    "commons-lang" % "commons-lang" % "2.6", 
    "javassist" % "javassist" % "3.12.1.GA" 
) 

~/MyProject/project/Build.scala如下


import sbt._ 

object MyProjectBuild extends Build { 
    lazy val MyProject = Project("MyProject", file(".")) 
} 

这似乎是工作几乎罚款。该项目确实编译并运行。项目名称设置正确(如果我不使用Build.scala,那么名称似乎看起来像“default - ????”,尽管它在build.sbt中指定)。

但问题是,依赖似乎并不管用 - update命令不下载任何东西。如何解决这个问题?在这种情况下,我需要在Build.scala而不是build.sbt中指定我的依赖关系吗?

+0

在标题,你的意思'build.sbt'而不是'build.scala'? –

+0

@ kipton - 巴罗斯不,我的意思是说有,除了'build.sbt' – Ivan

回答

17

有没有可能是你已经检索到的项目的依赖,但没有意识到这一点,因为它们存储在常春藤缓存?你可以用命令来查看从SBT控制台管理类路径

show managed-classpath 

最近SBT的版本不被管理的依赖关系存储在项目目录,除非该项目被配置这样做。如果你愿意,你可以添加以下到您的build.sbt文件:

retrieveManaged := true 

这将创建一个~/MyProject/lib_managed/目录和内容。

+0

但这并不复制的Scala库'Build.scala'一个项目lib_managed?我如何实现这一目标? – Themerius

+4

您可能需要运行SBT命令'reload','clean'和'update'。 –

+0

不幸的是,这是行不通的。 'scala-compiler.jar'仍然保存〜/ .sbt/boot/...,如果这个文件也可以保存在lib_managed中,那将会很好。 – Themerius