sbt-assembly 不包括 scala 库

Posted

技术标签:

【中文标题】sbt-assembly 不包括 scala 库【英文标题】:sbt-assembly is not including scala libraries 【发布时间】:2019-05-11 15:28:49 【问题描述】:

我正在编写的代码将在仅安装了 Java 8 运行时的 AWS Lambda 中运行,因此我需要将 scala 库包含在我的 jar 中。当我给它我用 sbt-assembly 构建的 jar 时,我得到了java.lang.NoClassDefFoundError: scala/Function3

这就是我在 build.sbt 中用于组装插件的全部内容:

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = true)

assemblyMergeStrategy in assembly := 
    case PathList("META-INF", _ @ _*) => MergeStrategy.discard
    case _                            => MergeStrategy.first

无论我是否有丢弃 META-INF 文件的行,这种情况仍然会发生。

我使用 brew 安装 scala,我尝试将我的 $SCALA_HOME 设置为 /usr/local/opt/scala/ideabrew info scala 的警告部分)和 /usr/local/bin/scalawhich scala 的输出)

:: 编辑 ::

我解压jar,发现有问题的类居然被包含在了这里的jar中:scala/Function3_scala-library-2.12.7_scala-library-2.12.7_scala-library-2.12.7.class

【问题讨论】:

它是仅在 AWS 中失败还是在您的本地计算机中失败?顺便说一句,您是否尝试过不使用 includeScala 选项? - 这是默认行为,我从来没有设置过它并且总是包含 scala,如果你设置它可能会有一个错误。 【参考方案1】:

我在 Intellij 的类路径中添加了 scala-library.jar,删除了目标文件夹并运行了 sbt assembly,并且成功了。

【讨论】:

以上是关于sbt-assembly 不包括 scala 库的主要内容,如果未能解决你的问题,请参考以下文章

使用 sbt-assembly 来自单个项目的具有不同外部依赖项的多个可执行 jar 文件

使用 sbt 运行多个应用程序

如何组装 SBT Scala 库以包含在 Java 7 Maven 项目中?

如何使用 SBT 为库构建分层 JAR 文件?

Scala 二进制序列化库

sbt-assembly:发现重复数据删除错误