如何从scala制作一个jar文件

edd*_*ark 17 scala jar sbt

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

object Main extends App {
    println("Hello World from Scala!")
}
Run Code Online (Sandbox Code Playgroud)

elm*_*elm 17

除此之外sbt,还要考虑这个简单的命令行,

scalac hello.scala -d hello.jar
Run Code Online (Sandbox Code Playgroud)

这会创建jar文件.运行它

scala hello.jar
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh
exec scala -savecompiled "$0" "$@"
!#
Run Code Online (Sandbox Code Playgroud)

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


shu*_*tty 16

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

name := "hello-world"

version := "1.0"

scalaVersion := "2.11.6"

mainClass := Some("com.example.Hello")
Run Code Online (Sandbox Code Playgroud)

要使用您的应用程序构建一个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")
Run Code Online (Sandbox Code Playgroud)

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

  • 它在target/scala-2.11目录中创建一个hello-world_2.11-1.0.jar文件.但我无法运行该文件,因为我收到"NoClassDefFoundError"错误. (3认同)