【问题标题】:How do I publish a fat JAR (JAR with dependencies) using sbt and sbt-release?如何使用 sbt 和 sbt-release 发布胖 JAR(具有依赖项的 JAR)?
【发布时间】:2014-05-29 00:36:40
【问题描述】:

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

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

我可以(例如使用sbt-onejarsbt-proguardsbt assembly)覆盖最低级别模块的打包方式吗?

看起来这些工具确实是为发布后步骤而设计的,但我确实需要一个(替换或额外的)已发布的工件来包含依赖项(但仅限于这个模块)。

更新:Publishing 用于 sbt-assembly 是针对单个项目的说明,不容易转化为多项目。

【问题讨论】:

    标签: deployment jar sbt sbt-assembly


    【解决方案1】:

    发布 sbt-assembly 是针对单个项目的说明,不容易转化为多项目。

    人们一直在使用 sbt-assembly 和 sbt-release 发布胖 JAR,没有任何问题。这是 2011 年的一篇博客文章:Publishing fat jar created by sbt-assembly。归结为将addArtifact(Artifact(projectName, "assembly"), sbtassembly.AssemblyKeys.assembly) 添加到您的build.sbt(请注意,博客有点过时了,AssemblyKeys 现在直接成为sbtassembly 的成员)。

    对于 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: _*)
    

    Defining custom artifacts:

    addArtifact 返回一系列设置(包装在 SettingsDefinition 中)。在完整的构建配置中,用法如下所示:

    ...
    lazy val proj = Project(...)
      .settings( addArtifact(...).settings : _* )
    ...
    

    【讨论】:

    • 谢谢,但如果我在 build.scala 中这样做会出现编译错误
    • “编译错误”——什么编译错误?如果我们既看不到您的代码也看不到错误消息,则无法提供帮助
    • 感谢 Eugene,您的编辑修复了它(注意:我们在其他地方讨论过这个问题,结果证明是文档中的错字)。
    • 我的似乎正在创建程序集,但随后发布了打包的 jar,而不是程序集 jar。你知道可能是什么问题吗?
    • @nickn 听起来你没有为组装好的 jar 设置分类器,所以它默认为正常的 artficat 名称,然后与首先制作/发布的非组装 jar 冲突
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2017-01-31
    • 2014-03-18
    • 2015-12-27
    • 2017-07-19
    • 2011-12-25
    • 2012-09-27
    • 2019-05-22
    相关资源
    最近更新 更多