Sbt下载指定的jar列表



我有一个JAR列表,我想通过SBT将JAR下载到指定的目标目录中。有什么方法/命令可以做到这一点吗?

我正在尝试在类路径中为spark这样的外部系统创建一个jar列表。默认情况下,spark会在类路径中添加一些jar除了spark classpath jar之外,我的应用程序还依赖一些jar。

我不想造一个肥罐子。我需要把依赖的罐子和我的罐子一起装在焦油球里。

我的建筑.sbt

name := "app-jar"
scalaVersion := "2.10.5"
dependencyOverrides += "org.scala-lang" % "scala-library" % scalaVersion.value
scalacOptions ++= Seq("-unchecked", "-deprecation")
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.4.1"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.1"
libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka" % "1.4.1"

// I want these jars from here
libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "1.4.0-M3"
libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector-java" % "1.4.0-M3"
libraryDependencies += "com.google.protobuf" % "protobuf-java" % "2.6.1"
...
// To here in my tar ball

到目前为止,我已经使用shell脚本实现了这一点。

我想知道是否有办法对sbt做同样的事情。

将sbt包添加到project/plugins.sbt(或创建它):

addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.7.9")  

packAutoSettings添加到build.sbt,然后运行:

sbt pack

target/pack/lib中,您将找到所有jar(具有依赖项)。

更新

将新任务添加到sbt:

val libraries = Seq(
 "com.datastax.spark" %% "spark-cassandra-connector" % "1.4.0-M3",
 "com.datastax.spark" %% "spark-cassandra-connector-java" % "1.4.0-M3",
 "com.google.protobuf" % "protobuf-java" % "2.6.1"
)
libraryDependencies ++=  libraries

lazy val removeNotNeeded = taskKey[Unit]("Remove not needed jars")

removeNotNeeded := {
    val fileSet = libraries.map(l => s"${l.name}-${l.revision}.jar").toSet
    println(s"$fileSet")
    val ver = scalaVersion.value.split("\.").take(2).mkString(".")
    println(s"$ver")    
    file("target/pack/lib").listFiles.foreach{
    file =>
    val without = file.getName.replace(s"_$ver","")
    println(s"$without")
    if(!fileSet.contains(without)){
               println(s"${file.getName} removed")
        sbt.IO.delete(file) 
    }
    }
}

在呼叫sbt pack之后,呼叫sbt removeNotNeeded。您将只收到所需的jar文件。

最新更新