当前位置: 首页 > 知识库问答 >
问题:

如何使用sbt和sbt发行版发布胖JAR(带依赖项的JAR)?

慕阳伯
2023-03-14

我需要为我的一个子项目构建一个jar,包括依赖项,以便它可以用作javaagent

我有一个多模块的sbt项目,这个模块是最低级别的(也是纯Java)。

我可以(例如使用sbt-onejar、sbt-proGuard或sbt组件)覆盖最低级别模块的打包方式吗?

看起来这些工具真的被设计成发布后的步骤,但是我真的需要一个(替换或附加的)发布的人工制品来包含依赖项(但只适用于这一个模块)。

更新:发布sbt程序集是针对单个项目的说明,不容易转换为多项目。

共有1个答案

阳凌
2023-03-14

sbt程序集的发布是针对单个项目的说明,不容易转换为多个项目。

人们一直在使用sbt组件发布fat JAR

对于sbt 0.13及以上版本,我更喜欢在多项目中使用build.sbt,所以我会这样写:

import AssemblyKeys._

lazy val commonSettings = Seq(
  version := "0.1-SNAPSHOT",
  organization := "com.example",
  scalaVersion := "2.10.1"
)

val app = (project in file("app")).
  settings(commonSettings: _*).
  settings(assemblySettings: _*).
  settings(
    artifact in (Compile, assembly) ~= { art =>
      art.copy(`classifier` = Some("assembly"))
    }
  ).
  settings(addArtifact(artifact in (Compile, assembly), assembly).settings: _*)

请参见定义自定义工件:

addArtifact返回一系列设置(包装在SettingsDefinition中)。在完整生成配置中,使用情况如下所示:

...
lazy val proj = Project(...)
  .settings( addArtifact(...).settings : _* )
...
 类似资料:
  • 我有一个sbt插件项目,使用多项目构建。我想使用这个插件作为其他sbt项目的依赖项。我已经创建了一个插件,但是当我把这个插件添加到project中时,我似乎不能正确地连接依赖项。 我在这里漏掉了什么?

  • 我下载了一个Maven项目,可以运行来构建目标helloworld。jar,它依赖于多个第三方运行时jar。但是,我不知道如何使用Maven将这些第三方JAR自动复制到特定目录中。查看pom。xml,我发现了以下语句。因此,基本上我希望将第三方JAR复制到。要做到这一点,我应该使用哪个maven插件/短语/目标?有人能给我看一个可运行的maven语法吗?谢谢

  • 我正在用Scala构建一个Apache Spark应用程序,并使用SBT来构建它。事情是这样的: 当我在IntelliJ IDEA下开发时,我希望将Spark依赖项包含在类路径中(我正在启动一个带有主类的常规应用程序) 当我打包应用程序(多亏了sbt-assembly)插件时,我不希望Spark依赖项包含在我的fat jar中 当我通过运行单元测试时,我希望Spark依赖项包含在类路径中(与#1相

  • 我在Gradle 4.6中有一个简单的项目,我想为它制作一个可执行的JAR。我尝试过,,,插件,但它们都没有添加我声明为的依赖项(我没有任何依赖项)。它与一起工作,例如用于插件,但我希望有依赖项。

  • 我正在使用SBT(在IntelliJ IDEA中)构建一个简单的Scala项目。 我想知道什么是最简单的方法来建立一个Uber JAR文件(又名胖JAR,超级JAR)。 我当前使用的是SBT,但当我将JAR文件提交到Apache Spark时,我得到以下错误: 线程“main”java.lang.SecurityException中的异常:清单主属性的签名文件摘要无效 或在编译期间出现此错误: j

  • 我正在尝试使用sbt发布ProGuard jar模糊处理的文件。到目前为止,我已经有了这段代码,但它并没有使用将模糊化的jar推送到本地ivy2 repo中: 你以前有没有做过这样的事情或者有什么想法? 非常感谢。