2014-11-23 4 views
12

Где sbt положить загруженный банку? Я пытаюсь попросить 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.

EDIT:

Вот пример одного из моих проектов, , в которых я определяю задачу 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 напрямую загружает зависимости в каталог my/lib? – firstprayer

+0

Я добавил пример, надеюсь, это поможет. – axel22

2

я найти зависимость от SBT http://mvnrepository.com/

, например, Вы хотите найти MySQL Java Connector, вы можете искать сформировать форму поиска, и выберите версию, которую вы любите, то вы увидите sbt тег:

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

, если вы хотите, чтобы найти загруженные банки, в окнах C:\Users\<userName>\.ivy2\cache

в Linux является ~/.ivy2/cache

удачи