2016-11-18 113 views
1

我想将libraryDependencies中指定的所有jar复制到任务中的文件夹中。如何通过SBT将本地缓存的jar文件复制到文件夹?

例如,我为项目定义了以下依赖项。

libraryDependencies ++= Seq(
    "org.neo4j" % "neo4j" % neo4j_version, 
    "org.scala-lang.modules" %% "scala-java8-compat" % "0.8.0", 
    "org.scala-lang" %% "scala-pickling" % "0.9.1", 
    "org.neo4j.test" % "neo4j-harness" % neo4j_version % "test", 
    "org.neo4j.driver" % "neo4j-java-driver" % "1.0.4" % "test" 
) 

现在我想创建一个任务,让我每次运行任务时,它会在依赖复制的罐子到一个文件夹。

我知道我可以手动指定罐子复制的绝对路径。我想要一个可以自动派生出罐子路径的任务。因此,稍后当我添加新的依赖项时,我不需要再次在.ivy缓存中找到路径。

谢谢。

回答

1

您可以使用managedClasspath来解决这个问题。见下面的例子。

val copyJarsTask = TaskKey[Unit]("copy-jars", "Copys jars") 

libraryDependencies ++= Seq(
    "org.scala-lang" %% "scala-pickling" % "0.9.1" 
) 

copyJarsTask := { 
    val folder = new File("my-jars") 

    (managedClasspath in Compile).value.files.foreach { f => 
    IO.copyFile(f, folder/f.getName) 
    } 
} 
相关问题