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/idea
(brew info scala
的警告部分)和 /usr/local/bin/scala
(which 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 文件