我想复制libraryDependencies中指定的所有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"
)
现在我想创建一个任务,这样每次运行任务时,它都会将依赖项中的jar文件复制到一个文件夹中。
我知道我可以手动指定要复制的罐子的绝对路径。我想要一个可以自动导出罐子路径的任务。所以稍后当我添加新的依赖项时,我不需要再次在.ivy缓存中找到路径。
感谢。
答案 0 :(得分: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)
}
}
答案 1 :(得分:0)
另一种选择是使用sbt-native-packager plugin with the Java Archetype并运行:
sbt stage
结果将是所有应用程序依赖项以及JAR或应用程序本身都将位于target/universal/stage/lib/
目录中。