【问题标题】:Why does "sbt stage" fail with Not a valid command?为什么“sbt stage”会因 Not a valid 命令而失败?
【发布时间】:2014-12-19 13:10:57
【问题描述】:

当我尝试使用 sbt clean compile stage 暂存我的应用程序时遇到错误:

[error] Not a valid command: stage
[error] Not a valid project ID: stage
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: stage
[error] stage
[error]      ^

我已经在其他机器上这样做了数百次,没有出现任何问题。我有 SBT 0.13.5 - 有人见过这个吗?我读过this other post,但我不在 Heroku。谢谢。

【问题讨论】:

    标签: sbt sbt-native-packager


    【解决方案1】:

    the comments above 之后,我意识到你只是想拥有stage 命令而不将整个 Play foo 带进来。

    stage 命令是sbt-native-packager 的一部分:

    [插件的]目标是能够捆绑使用 SBT 构建的 Scala 软件,用于原生打包系统,例如 deb、rpm、homebrew、msi。

    sbt-native-packager 插件的功能之一是the stage command

    > help stage
    Create a local directory with all the files laid out as they would be in the final distribution.
    

    只需将以下内容添加到project/plugins.sbt 即可在项目中使用插件(在the comment of Muki 之后,示例使用the latest version 1.0.0-M1 和自动插件功能):

    addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-M1")
    

    您还必须将以下内容添加到build.sbt

    enablePlugins(JavaAppPackaging)
    

    就是这样!现在一切就绪。

    执行stage

    > stage
    [info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT-sources.jar ...
    [info] Done packaging.
    [info] Updating {file:/Users/jacek/dev/sandbox/command-build-scala/}command-build-scala...
    [info] Wrote /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT.pom
    [info] Resolving org.fusesource.jansi#jansi;1.4 ...
    [info] Done updating.
    [info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT-javadoc.jar ...
    [info] Done packaging.
    [info] Packaging /Users/jacek/dev/sandbox/command-build-scala/target/scala-2.10/command-build-scala_2.10-0.1-SNAPSHOT.jar ...
    [info] Done packaging.
    [success] Total time: 0 s, completed Nov 5, 2014 2:55:55 PM
    

    【讨论】:

    • 或者使用 sbt 0.13.5 和 sbt-native-packager 1.0.0-M1 在野外散步,只需:enablePlugins(JavaServerAppPackaging)
    • 哇哦!我会说“终于”! enablePlugins 不是 0.13.6 的一部分吗?
    • AFAIK 这已经是 0.13.5 的一部分。不过这应该没关系,因为 0.13.5 和 0.13.6 应该兼容
    • 更新了!谢谢@Muki
    • 这看起来很有希望,但我不认为它等同于 Play 框架附带的 sbt stage 插件,它生成的不是 OS 包,而是包含所有依赖项的 uberjar,即我真正需要的。
    【解决方案2】:

    经过大量挖掘,我发现 'stage' 是由 Play framework 的一个插件实现的,我在其他项目中确实使用过这个插件,并解释了为什么 sbt 接受 stage 命令。

    【讨论】:

    • 这是否意味着您没有正确设置项目,即project/plugins.sbt没有addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")
    • 正确。我只是不想将整个 Play 框架引入到另一个应用程序中,它是一个没有 HTTP 接口的后端服务。
    • 不要害怕。该插件会通过其他任务和设置更改 sbt 本身,除非您没有在应用程序中明确使用它,否则它们不会出现在任何地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多