2014-11-23 50 views
12

sbt把下载的jar放在哪里?我试图请求sbt下载所有依赖关系,并将它们放在lib /目录下,以便我可以将它们与ScalaIDE一起使用,但是,在我成功运行sbt compile后,我不知道在哪里可以找到这些下载的.jars在哪里可以找到下载的sbt库?

回答

13

全部新的SBT版本(在0.7.x之后)默认将下载的JARS放入主目录中的.ivy2目录。

如果您使用的是Linux,通常是/home/<username>/.ivy2/cache

如果您使用的是Windows,通常是c:\Users\<username>\.ivy2\cache

编辑:

下面是从我的项目, 中,我定义了一个SBT的任务,副本的依赖复制到目标文件夹的一个例子。 您可以将此代码放入您的project/Build.scala项目定义文件中。 你应该有这样的事情在你的项目定义文件(在www.scala-sbt.org更多信息):

import sbt._ 
import Keys._ 
import Process._ 

object MyProjectBuild extends Build { 

下面的代码将所有的库到deploy/libz子目录, 通过定义deploy任务捕捉你的程序神器及其所有路径依赖:

val deployKey = TaskKey[Unit](
    "deploy", 
    "Deploys the project in the `deploy` subdirectory." 
) 

val deployTask = deployKey <<= (artifactPath in (Compile, packageBin), dependencyClasspath in Compile) map { 
    (artifact, classpath) => 
    val deploydir = new File("deploy") 
    val libzdir = new File("deploy%slib".format(File.separator)) 

    // clean old subdirectory 
    deploydir.delete() 

    // create subdirectory structure 
    deploydir.mkdir() 
    libzdir.mkdir() 

    // copy deps and artifacts 
    val fullcp = classpath.map(_.data) :+ artifact 
    def lastName(file: File) = if (file.isFile) file.getName else file.getParentFile.getParentFile.getParentFile.getName 
    for (file <- fullcp) { 
    println("Copying: " + file + "; lastName: " + lastName(file)) 
    if (file.isFile) IO.copyFile(file, (libzdir/lastName(file)).asFile); 
    else IO.copyDirectory(file, (libzdir/lastName(file))) 
    } 
} dependsOn (packageBin in Compile) 
+0

THX。但有没有什么办法可以直接告诉SBT将依赖关系下载到我的/ lib目录中? – firstprayer 2014-11-24 01:22:48

+0

我添加了一个例子,我希望它有帮助。 – axel22 2014-11-24 06:15:49

2

我找到http://mvnrepository.com/

例如SBT依赖,你想找到MySQL Java Connector,你可以搜索形成搜索框,选择你喜欢的版本,然后你会看到sbt标签:

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.34" 

,如果你想找到下载的罐子,在窗户是C:\Users\<userName>\.ivy2\cache

在Linux中~/.ivy2/cache

好运