命令行执行phpunit 类找不到_使用scala的REPL创建自己的命令行工具

专业的软件一般都会有自己的命令行工具,如mysql的client端,启动后就会有mysql> 提示符,然后可以输入sql语句并执行。python、spark也有同样的命令行工具。 大型的行业软件,有很多也会有自己的命令行工具,看上去都挺高大上的。其中spark就是用scala的REPL实现的。

REPL就是Read Eval Print Loop,一般翻译成交互式解析器,而我非专业的说法就是一个命令行工具。网上也有不少介绍spark的REPL原理,但是看上去都有点复杂,其实我们通过scala实现自己的命令行工具,非常简单。

下面就说一下实现步骤,还是用gradle做构建工具:

1. 设置build.gradle,需要引用scala-compiler库

group 'com.mycompany'version '1.0-SNAPSHOT'apply plugin: 'scala'sourceCompatibility = 1.8repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }}dependencies { compile group: 'org.scala-lang', name: 'scala-library', version: '2.12.7' compile group: 'org.scala-lang', name: 'scala-reflect', version: '2.12.7' compile group: 'org.scala-lang', name: 'scala-compiler', version: '2.12.7'}

2. 在src/main/scala目录下新建MyPrjLoop 类

1) 覆盖prompt,填什么提示符就是什么样子了

2) 覆盖printWelcome,这里填上自己喜欢的欢迎界面就行,就像spark的命令行工具启动时提示spark那样。如果不覆盖,会提示scala版本信息。

3) initCmd是自定义变量,需要时填上自定义scala语句。

4) 覆盖createInterpreter方法,inp.quietRun(initCmd)。Inp是核心,首先解析initCmd中的scala语句。启动后通过命令行读入的语句也会交给它解析。

class MyPrjLoop extends ILoop{ override def prompt: String = "==>" override def printWelcome(): Unit = { echo("") } private val initCmd = """ """ override def createInterpreter(): Unit = { super.createInterpreter intp.quietRun(initCmd) }}

3. 创建入口类Main的Object类

1) 创建settings实例,设置settings.usejavacp.value,使用java classpath。

2) 执行MyPrjLoop的process方法。

object Main extends App{ val settings = new Settings settings.usejavacp.value = true new MyPrjLoop().process(settings)}主要工作就这三步,这个基本的命令行工具已经完成了,下面只要打包就行了。通过idea的artifacts打包:
800e1c2313d94dc61b649633d9cc7bfc.png
20006e5008606eff32225951c32b63dd.png
9c1932e35b183fe7804d0c5a45f7b0a6.png
 

然后就是build了,生成myproject_main.jar,然后执行$ java -cp myproject_main.jar Main

执行效果:

ead89dd4e5491c9770d7f0ba621b313c.png
3c29138d1b327072cb7feccdc464fb19.png

println是scala自带的方法,下面我们增加一个自定义的方法:

4. 创建com.mycompany.myprj包,在这个包下创建city类。

定义list方法:

package com.mycompay.myprjobject city { val cityList = List("beijing
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值