【问题标题】:How to make a jar file from scala如何从scala制作一个jar文件
【发布时间】:2015-08-15 01:45:40
【问题描述】:

我在网上读到可以从可以从 cli 运行的 scala 代码创建一个 jar 文件。所有写的都是下面的代码。如何从中制作 jar 文件?我正在使用 sbt 0.13.7。

object Main extends App {
    println("Hello World from Scala!")
}

【问题讨论】:

    标签: scala jar sbt


    【解决方案1】:

    你可以试试这个 SBT 插件:https://github.com/sbt/sbt-native-packager

    我用这个插件创建了 Linux Debian 软件包(Windows MSI 应该也是可能的)。

    【讨论】:

      【解决方案2】:

      为了能够使用 Scala 执行复杂的构建任务,您必须使用 SBT 作为构建工具:它是创建应用程序包的默认 scala 方式。要为您的项目添加 SBT 支持,只需在根文件夹中创建一个 build.sbt 文件:

      name := "hello-world"
      
      version := "1.0"
      
      scalaVersion := "2.11.6"
      
      mainClass := Some("com.example.Hello")
      

      如果您没有外部依赖项,要使用您的应用程序构建一个 jar 文件,您可以运行 sbt package,它会使用您的代码构建一个 hello-world_2.11_1.0.jar 文件,因此您可以使用 java -jar hello-world.jar 运行它。但是您肯定必须在代码中包含一些依赖项,至少因为 Scala 运行时。

      使用 sbt-assembly 插件构建一个包含所有依赖项的胖 jar。要安装它,请添加一行

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

      到您的 project/plugins.sbt 文件(如果没有这样的文件,则创建它)并从控制台运行 sbt assembly 任务。

      【讨论】:

      • 我会在 build.sbt 文件中写什么?
      • @eddard.stark 什么都没有,这是构建依赖,而不是运行时依赖。
      • 它警告我没有主类。这是个问题吗?
      • @eddard.stark 您需要更改 mainClass 字段以指向您的主类。 mainClass := Some("Main") 以防您没有包裹。
      • 它在 target/scala-2.11 目录中创建一个 hello-world_2.11-1.0.jar 文件。但我无法运行该文件,因为我收到“NoClassDefFoundError”错误。
      【解决方案3】:

      除了sbt,还要考虑这个简单的命令行,

      scalac hello.scala -d hello.jar
      

      创建 jar 文件。运行它

      scala hello.jar
      

      也可以通过添加此标头来编写源代码脚本

      #!/bin/sh
      exec scala -savecompiled "$0" "$@"
      !#
      

      并使用Main.main(args) 调用main 方法(注意chmod +x hello.sh 使文件可执行)。这里savecompiled 将在第一次调用时创建一个 jar 文件。

      【讨论】:

      • 当我尝试您对 OP 代码的回答时,我收到了 java.lang.NullPointerException
      【解决方案4】:

      sbt: publishLocal 然后转到目标文件夹,可能叫scala-2.**

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 2011-04-12
        相关资源
        最近更新 更多