Scala开发之2:REPL 命令行工具

本文介绍两种Scala命令行工具:内置REPL及ammonite REPL,重点讲解如何通过这两种工具加载外部jar包,以便在Scala环境中使用Java库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala开发之2:使用 REPL 命令行工具

1 scala自带的命令行工具

scala安装好之后,输入scala就进入了scala自带的REPL. 如果不能进入,确定路径配置是否正确。如下是我的配置:

export JAVA_TOOL_OPTIONS="-Xmx512m -Xms64m -Dfile.encoding=UTF-8"
export SCALA_HOME=/usr/local/java/scala
export JAVA_HOME=/usr/local/java/java8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$SCALA_HOME/bin

scala 和 java 是可以互操作的。如果一个 jar 包在 scala 的 classpath 中,那么可以直接在 scala 命令中使用如下的语法:

scala > import java.util.Properties

如果 jar 文件不在这个 scala 的运行时环境中,就要手动添加进来。例如下面引入测试类报错:

$ scala
scala> import org.scalatest.funsuite.AnyFunSuite
<console>:11: error: object scalatest is not a member of package org
       import org.scalatest.funsuite.AnyFunSuite
                  ^

因为 scalatest 这个 jar 包是要额外下载的,我已经下载并放到下面的位置:

/root/.m2/repository/org/scalatest/scalatest-funsuite_2.12/3.2.2-M2/scalatest-funsuite_2.12-3.2.2-M2.jar

重新运行:

$ scala -classpath /root/.m2/repository/org/scalatest/scalatest-funsuite_2.12/3.2.2-M2/scalatest-funsuite_2.12-3.2.2-M2.jar
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m -Dfile.encoding=UTF-8
Welcome to Scala 2.12.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_152).
Type in expressions for evaluation. Or try :help.

scala> import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.funsuite.AnyFunSuite

scala>:quit

也可以用 :require 命令添加,例如:

$ scala
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m -Dfile.encoding=UTF-8
Welcome to Scala 2.12.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_152).
Type in expressions for evaluation. Or try :help.

scala> :require /root/.m2/repository/org/scalatest/scalatest-funsuite_2.12/3.2.2-M2/scalatest-funsuite_2.12-3.2.2-M2.jar
Added '/root/.m2/repository/org/scalatest/scalatest-funsuite_2.12/3.2.2-M2/scalatest-funsuite_2.12-3.2.2-M2.jar' to classpath.
scala> import scalatest.funsuite.AnyFunSuite
<console>:11: error: not found: value scalatest
       import scalatest.funsuite.AnyFunSuite
              ^
scala> import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.funsuite.AnyFunSuite

scala> :quit

2 ammonite REPL

这个是lihaoyi写的命令行工具。非常强大,反应速度快。

$ amm
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m -Dfile.encoding=UTF-8
Loading...
Welcome to the Ammonite Repl 2.2.0 (Scala 2.12.12 Java 1.8.0_152)

@ import java.util.Properties
import java.util.Properties
@ exit

对于外部的java类,引入报错:

@ import org.scalatest._
cmd1.sc:1: object scalatest is not a member of package org
import org.scalatest._
           ^
Compilation Failed

按下面的方式载入 jar 文件:

@amm interp.load.cp(os.Path("/root/.m2/repository/org/scalatest/scalatest-funsuite_2.12/3.2.2-M2/scalatest-funsuite_2.12-3.2.2-M2.jar"))

@ import scalatest.funsuite.AnyFunSuite
cmd1.sc:1: not found: value scalatest
import scalatest.funsuite.AnyFunSuite
       ^
Compilation Failed

@ import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.funsuite.AnyFunSuite

@ exit

参考:http://ammonite.io

总结

本文总结了2种 scala 的命令行工具如何引入外部 jar 包。方便用来学习写 scala。如果编程方式使用 scala,通常是混合 java 一起开发。我喜欢用 maven 来搭建 java 和 scala 一体的项目平台。对于开发而言测试是非常必要的,如果想快速了解如何测试 scala 工程,下面这个链接能提供一些思路:

https://github.com/scalatest/scalatest-maven-plugin

对于 scala-2.12 ,《Scala 编程(第3版)》P260页存在错误(org.scalatest.FunSuite)。现在应该是:

org.scalatest.funsuite.AnyFunSuite

接下来的文章我会演示如何整合 java,scala, maven 来做一个完整的工程范例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值