gpt4 book ai didi

scala - 如何从 shell 作为普通命令行程序运行 sbt 主类?

转载 作者:行者123 更新时间:2023-12-03 10:25:25 24 4
gpt4 key购买 nike

如何从 shell 运行 sbt 应用程序,以便我可以将我的应用程序作为普通命令行程序运行(就像直接通过 scala 运行,但无需设置巨大的类路径)?

我知道我可以做到:

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

但是这 (1) 需要永远启动,因为它启动 sbt,(2) 导致所有 stdout 和 stderr 转到 stdout,以及 (3) 导致所有输出都被记录器 [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):

    函数 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 构建文件的必要条件)。

    生成启动脚本

    然后,无论何时你想创建一个脚本来启动你的应用程序,比如 sbt run-main ,但没有 sbt,执行:
    $ sbt start-script


    target/start mypackage.MyMainClass

    关于scala - 如何从 shell 作为普通命令行程序运行 sbt 主类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134993/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com