【问题标题】:How to create executable jar in scala which can run on jvm?如何在 scala 中创建可以在 jvm 上运行的可执行 jar?
【发布时间】:2016-05-20 19:11:55
【问题描述】:

我使用的是 scala 版本 2.11.4,我尝试了各种选项,例如 sbt-assembly、构建工件(Intellij Idea 功能)、sbt 包。不幸的是,它们都没有对我起作用。

我尝试了以下事情:

  1. 使用 sbt-assembly

创建了 assembly.sbt 文件并添加了以下行:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0")

build.sbt:

scalaVersion in ThisBuild := "2.11.4"

resolvers += Resolver.url("bintray-sbt-plugins",     url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

ivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }

我收到以下错误

[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]      com.eed3si9n:sbt-assembly:0.12.0 (sbtVersion=0.13, scalaVersion=2.11)
  1. 具有使用 Intellij Idea 15 的“构建工件”功能

能够创建一个罐子。但是,无法执行它。出现以下错误:

Invalid or corrupt jarfile

为此,我尝试了命令:java -jar JAR_FILE

  1. 使用 sbt 包

能够创建 JAR。但是,无法执行它。出现以下错误:

java.lang.NoClassDefFoundError scala/Function0

我正在尝试使用命令:

java -cp scala-library.jar -jar JAR_FILE

已解决

我可以通过切换到 scala 版本 2.10.5 来创建 jar,然后使用 sbt-assembly 插件。对没有可用的解决方案来使用最新版本的 scala 创建可执行 jar 的事实感到有些失望。

【问题讨论】:

  • sbt-assembly 正是解决此问题的正确工具,如果我没记错的话,它的默认配置是 bundles scala,那么你到底做了什么?发生了什么?
  • sbt-assembly 似乎不适用于 scala 版本 2.11.4。我收到错误:[警告] 注意:一些未解决的依赖项有额外的属性。检查这些依赖项是否与请求的属性一起存在。 [警告] com.eed3si9n:sbt-assembly:0.12.0 (sbtVersion=0.13, scalaVersion=2.11) [警告] 我在 assembly.sbt addSbtPlugin("com.eed3si9n" %% "sbt-assembly" % "0.12.0") 和 build.sbt 解析器中的以下行 += Resolver.url("bintray-sbt-plugins", url("dl.bintray.com/sbt/…
  • 您的装配结构如何?它有一个主类吗?你能在这里展示一下吗?这是用于客户端/桌面还是服务器?
  • 对于 sbt 汇编,你不需要行 "resolvers += ... " 和 "ivyScala := ... ",绝对不是最新版本,以及 sbt 0.13.6 或更高版本。如果您从一些较旧的示例中复制它们,只需将它们删除即可。
  • 你有哪个版本的 sbt?根据 sbt 组装网站 sbt 0.13.6 和更新版本应该使用不同版本的 sbt。确保您正在运行当前版本的 sbt 并根据他们的网站配置程序集:github.com/sbt/sbt-assembly

标签: scala jar sbt executable-jar


【解决方案1】:

如果您使用的是 sbt-assembly 插件,则要执行的正确任务称为 assembly。使用 IntelliJ IDEA 时,需要从命令行执行 sbt 汇编,IDE 仍然无法执行此类 SBT 任务。

包含所有依赖项的生成的 jar 通常称为 a fat jar - 如果您需要更多搜索,这就是要搜索的内容。

【讨论】:

  • 我通过运行 -> 编辑配置 -> SBT 任务尝试了来自 intellijIdea 的组装任务。但没有运气。将尝试使用命令行。
【解决方案2】:

由于我还不能发表评论,我将使用答案,但更多的是一个问题 - 我一直在广泛使用 sbt 包来解决这个问题。我 cd 进入包含 src/main/scala|java 并运行 sbt 包的目录,然后将 jar/war 文件推送到所需的目的地,在我的例子中是码头。

您能否准确解释您在做什么、输出结果和问题的详细信息?

【讨论】:

  • 感谢您的评论,我在描述中添加了更多细节。
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2011-01-03
  • 1970-01-01
  • 2013-06-06
  • 2020-12-02
相关资源
最近更新 更多