我正在使用SBT(在IntelliJ IDEA中)构建一个简单的Scala项目。
我想知道什么是最简单的方法来建立一个Uber JAR文件(又名胖JAR,超级JAR)。
我当前使用的是SBT,但当我将JAR文件提交到Apache Spark时,我得到以下错误:
线程“main”java.lang.SecurityException中的异常:清单主属性的签名文件摘要无效
或在编译期间出现此错误:
java.lang.RuntimeException:重复数据删除:在以下文件中发现不同的文件内容:
path\dependency.jar:meta-inf/dependencies
path\dependency.jar:meta-inf/manifest.mf
这看起来是因为我的一些依赖包括签名文件(META-INF),它需要在最终的Uber JAR文件中删除。
我试着这样使用sbt-assembly插件:
/Project/Assembly.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
/project/plugins.sbt
logLevel := Level.Warn
/build.sbt
lazy val commonSettings = Seq(
name := "Spark-Test"
version := "1.0"
scalaVersion := "2.11.4"
)
lazy val app = (project in file("app")).
settings(commonSettings: _*).
settings(
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.0",
"org.apache.spark" %% "spark-streaming" % "1.2.0",
"org.apache.spark" % "spark-streaming-twitter_2.10" % "1.2.0"
)
)
当我点击“构建工件...”在IntelliJ IDEA中,我得到一个JAR文件。但我却犯了同样的错误...
多谢了。
最后,我完全跳过使用IntelliJ IDEA来避免在我的全局理解中产生噪音:)
我开始阅读正式的SBT教程。
我使用以下文件结构创建了我的项目:
my-project/project/assembly.sbt
my-project/src/main/scala/myPackage/MyMainObject.scala
my-project/build.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")
我的最小build.sbt如下所示:
lazy val root = (project in file(".")).
settings(
name := "my-project",
version := "1.0",
scalaVersion := "2.11.4",
mainClass in Compile := Some("myPackage.MyMainObject")
)
val sparkVersion = "1.2.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
"org.apache.spark" %% "spark-streaming-twitter" % sparkVersion
)
// META-INF discarding
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
}
注意:%“provided”
表示不将依赖项包含在最终的fat JAR中(那些库已经包含在我的workers中)
注:META-INF丢弃受到这个答案的启发。
现在,我可以通过在我的/my-project根文件夹中运行以下命令,使用SBT(如何安装它)构建我的fat JAR:
sbt assembly
我的fat JAR现在位于新的generated/Target文件夹中:
/my-project/target/scala-2.11/my-project-assembly-1.0.jar
希望能帮到别人。
问题内容: 我是Gradle新手。我想构建一个uberjar(AKA fatjar),其中包括项目的所有传递依赖项。我需要在“ build.gradle”中添加哪些行? 这是我目前拥有的:(我是从几天前的某个地方复制的,但是不要从那里收集。) 问题答案: 您是否尝试过 gradle食谱中 的fatjar示例? 您正在寻找的是gradle 的影子插件
我试图在NetBeans中建立一个胖罐子。当我点击clean时,它显示以下错误: C:\workspace\travel_agency\nbproject\build-impl.xml:63:源资源不存在:C:\workspace\travel_agency\dist\nblibraries.properties 然后单击错误,它会将我发送到build-imple.xml文件中的以下行:
我正在用一个胖罐子塑造一个码头工人的形象。我使用插件构建jar,使用构建Docker映像。我对SBT不是很熟悉,我遇到了以下问题。 > 构建映像的步骤之一是复制胖罐子。由于assembly插件在中创建jar,因此我需要知道确切的和jar名称。程序集似乎有一个键,但我不确定如何访问它。我尝试了以下失败的方法。 帮助
我需要为我的一个子项目构建一个jar,包括依赖项,以便它可以用作。 我有一个多模块的sbt项目,这个模块是最低级别的(也是纯Java)。 我可以(例如使用sbt-onejar、sbt-proGuard或sbt组件)覆盖最低级别模块的打包方式吗? 看起来这些工具真的被设计成发布后的步骤,但是我真的需要一个(替换或附加的)发布的人工制品来包含依赖项(但只适用于这一个模块)。 更新:发布sbt程序集是针
每个人 我不知道是否已经有人问过这个问题,但我到处找,但找不到。我正在使用GitHub进行Intellij IDEA项目。我在工作中使用我的台式计算机来开发。完成后,我在Github上做了一个提交,它直接在我的帐户上。但是,有时我想在家里继续使用笔记本电脑,使用同一个项目并修改和提交它。由于不太了解Github与Intellij的集成,我知道我可以将现有项目下载到本地计算机上。但我的问题是,如何更
我在图书馆工作,需要一些依赖。为了便于部署,我想创建一个包含所有内容的JAR文件,包括依赖项。 我已经尝试过sbt汇编——这是可行的,但由于法律原因,这可能是不可取的,因此我正在寻找一种解决方案,其中生成的JAR文件包含原始JAR文件,并且类路径条目包含在清单中。MF的设置使得客户端类可以将这个“嵌套JAR文件”添加到它们的类路径中。 这样的事情可能吗?sbt one jar几乎可以满足我的需求,