首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载指定的jars列表

下载指定的jars列表
EN

Stack Overflow用户
提问于 2016-01-14 07:50:29
回答 1查看 2.5K关注 0票数 2

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

我正在尝试的是在类路径中有一个列表,用于外部系统,如火花。默认情况下,星火添加一些罐子到类路径,我也有一些罐子,我的应用程序依赖除了星火类路径罐。

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

我的build.sbt

代码语言:javascript
复制
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做同样的事情。

EN

回答 1

Stack Overflow用户

发布于 2016-01-25 21:30:03

sbt-pack添加到您的project/plugins.sbt (或创建它):

代码语言:javascript
复制
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.7.9")  

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

代码语言:javascript
复制
sbt pack

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

更新

向sbt添加新任务:

代码语言:javascript
复制
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文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34784174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档