【问题标题】:Publish SBT project with sub-projects as a single Maven artifact将带有子项目的 SBT 项目作为单个 Maven 工件发布
【发布时间】:2019-06-28 11:47:42
【问题描述】:

我有一个用于 Scala 库的 SBT 项目。该实现分布在多个 SBT 子项目中,但我想将该库作为单个 JAR 发布。我构建了以下示例:

val subProject = project

val myLibrary = project
  .in(file("."))
  .dependsOn(subProject)

项目myLibrary 它是依赖于所有其他子项目的主项目。如果我运行sbt myLibrary/package,我会得到一个JAR 文件,其中只有类文件、源代码和项目myLibrary 中源代码的渲染文档。我找到了以下解决方法来包含其他子项目中的文件,方法是将以下设置添加到myLibrary

val myLibrary = project
  .in(file("."))
  .dependsOn(subProject)
  .settings(
    Compile / packageBin / mappings ++= (subProject / Compile / packageBin / mappings).value,
    Compile / packageSrc / mappings ++= (subProject / Compile / packageSrc / mappings).value,
    Compile / packageDoc / mappings ++= (subProject / Compile / packageDoc / mappings).value)

产生相同结果的预期方法是什么?

【问题讨论】:

  • 显然,鉴于没有人给出更好的解决方案,您的解决方案是最好的。但它与packageDoc 存在问题,由于映射中重复的“index.html”键而抱怨。至少在 sbt 1.4.4 中。你找到任何解决方案了吗?
  • 为了避免重复键错误,我猜Compile / packageDoc / mappings ++= (subProject / Compile / packageDoc / mappings).value)应该替换为Compile / doc / sources ++= (subProject / Compile / doc / sources).value

标签: scala jar sbt


【解决方案1】:

您可以查看 sbt-assembly 插件,该插件会为您的项目创建 fat jar(包括所有依赖项)。

【讨论】:

  • sbt-assembly 的自述文件特别不鼓励使用插件创建用于发布的工件。它也没有提到它如何用于发布源代码或 JavaDoc JAR,以及发布的 pom.xml 是否仍然提到所有 sbt 子项目的聚合依赖项集。我不认为 sbt-assembly 在这方面让我的生活更轻松。不过还是谢谢!
  • sbt-assembly 创建一个包含项目所有依赖项的胖 jar。 OP 尝试将项目的 子项目 发布到单个 jar 中。非常不同的用例,正如 OP 提到的,这个插件没有帮助。
猜你喜欢
  • 2012-05-01
  • 2021-06-09
  • 1970-01-01
  • 2018-02-26
  • 2016-11-27
  • 2015-04-02
  • 2014-07-10
  • 2015-05-11
  • 2012-07-06
相关资源
最近更新 更多