加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何从shell作为正常的命令行程序运行sbt主类?

发布时间:2020-12-16 09:45:04 所属栏目:安全 来源:网络整理
导读:如何从shell运行sbt应用程序,以便我可以作为一个普通的命令行程序运行我的应用程序(好像通过scala直接运行,而不必设置一个巨大的类路径)? 我知道我可以做: echo hello | sbt 'run-main com.foo.MyMain3 arg1 arg2' out.txt 但是(1)由于启动sbt,所以(2)
如何从shell运行sbt应用程序,以便我可以作为一个普通的命令行程序运行我的应用程序(好像通过scala直接运行,而不必设置一个巨大的类路径)?

我知道我可以做:

echo hello | sbt 'run-main com.foo.MyMain3 arg1 arg2' > out.txt

但是(1)由于启动sbt,所以(2)会导致所有的stdout和stderr都到stdout,所以(3)会导致所有输出都用logger [info]或[error]进行装饰。

我看着https://github.com/harrah/xsbt/wiki/Launcher,但是它似乎太重了,因为它下载了依赖关系,并且设置了一个新的环境。我只想在我现有的开发环境中运行这个程序。

到目前为止,我已经拼凑了我自己的脚本来建立一个类路径,你也可以做一些其他的事情,比如modify your project file to get sbt to print the raw classpath,但我觉得有一个更好的办法。

解决方法

start-script SBT plugin现在在:

https://github.com/sbt/sbt-start-script

它需要几个步骤来设置和生成不能在OS X上运行的脚本,但如果您在该平台上(如下所示),则可以很容易地修复它们。

建立

>安装greadlink(仅适用于OS X):

a)brew install coreutils

b)通过将这些行添加到?/ .bashrc来将readlink映射到新函数(greadlink):

function readlink(){greadlink“$ @”; }}

export -f readlink`
>将启动脚本插件添加到?/ .sbt / plugins / build.sbt中:

addSbtPlugin(“com.typesafe.sbt”%“sbt-start-script”%“0.8.0”)
>将起始脚本任务添加到当前项目中:

$ sbt add-start-script-tasks#从build.sbt所在的目录执行
>为当前build.sbt添加启动脚本支持:

导入com.typesafe.sbt.SbtStartScript

seq(SbtStartScript.startScriptForClassesSettings:_ *)

注意语句之间的空白行(用于SBT构建文件的de rigueur)。

生成起始脚本

然后,每当你想创建一个脚本来启动你的应用程序,如sbt run-main,但没有sbt,执行:

$ sbt start-script

target/start mypackage.MyMainClass

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读