scalameta / sbt-native-image

Plugin to generate native-image binaries with sbt
252 stars 22 forks source link

分享:Scala 3 体验 NativeImage ,基于sbt + native image 插件 #57

Closed ghost closed 2 years ago

ghost commented 2 years ago

Scala3是最新一代的Scala, 经过重新设计的API,让Scala3可玩性大大提升,跟Python语法非常接近了。但是性能更好。

重点不是这个,我们分享一下如何用sbt创建一个scala 3的项目,然后编译为机器原生镜像 nativeImage

我的机器是macos 12

安装Scala3我是通过cs 工具,安装了cs工具,执行cs setup,它就会把各种需要的东西都装好

先用cs工具装sbt,我执行 cs install sbt

装了sbt,我们就可以创建项目了

我们执行 sbt new scala/scala3.g8

创建一个scala3的新项目,然后我们取名为 meo1

我们进入到项目目录cd meo1

注意,我们需要建立一个配置文件,项目的文件路径为:project/plugins.sbt

内容如下

addSbtPlugin("org.scalameta" % "sbt-native-image" % "0.3.1")

然后我们修改build.sbt也就是项目的根目录下面的构建文件,在.settings上面加入

  .enablePlugins(NativeImagePlugin)

最终的构建文件像这样

val scala3Version = "3.1.3"

lazy val root = project
.in(file("."))
.enablePlugins(NativeImagePlugin)
.settings(
name := "meo1",
version := "0.1.0-SNAPSHOT",

scalaVersion := scala3Version,

libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test
)

接着我们运行sbt命令 进入之后,我们执行nativeImage 编译如果没报错,你最终会得到一个执行文件,在target/native-image目录下面 cd target/native-image 运行应用程序

$ ./meo1
Hello world!
I was compiled by Scala 3. :)

$ otool -L ./meo1
./meo1:
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1858.112.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

好的,现在你已经掌握了如何用Scala 3 ,快速开发并编译自己的原生可执行镜像了。非常棒,就像魔法一样。

ghost commented 2 years ago

This document is for Chinese user who want to try sbt-native-image, it is very simple and easy to do.