【问题标题】:SBT Assembly not working (not a valid command)SBT 程序集不工作(不是有效的命令)
【发布时间】:2016-07-11 05:14:59
【问题描述】:

我已经尝试了很多与该主题相关的解决方案。最重要的是,

sbt assembly command not found

看起来最相关,但这并没有解决问题。

我正在使用 sbt 13.7

build.sbt:

lazy val commonSettings = Seq(
  organization := "com.example",
  version := "0.1.0"
)

lazy val app = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "fat-jar-test"
  )

assembly.sbt:

resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

项目结构

root
  |
  src
  target
  project
    |
    build.sbt
    assembly.sbt

在 sbt 中我编译成功,我可以成功打包,但是当我运行汇编命令时,我得到:

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

我正在使用 Intellij,但从终端运行 sbt。
我在 Mac OSX 上。
我最初从他们的站点下载并安装了 sbt,正常安装。我删除并尝试从 macports 安装,没有区别。
我在 build.sbt 设置中有 scala 版本,但因为我遇到错误并阅读了 2.11.x 不适用于 sbt 而将其删除。这停止了​​错误,但我仍然有装配问题。

编辑:

我不确定 build.sbt 在这个结构中的位置。在我把它放在根目录之前。根据下面 Roman 的建议,我已将其移回那里,但可惜我收到了完全相同的错误。

【问题讨论】:

  • plugins 命令显示了什么?
  • sbt.plugins.IvyPlugin:在应用中启用 sbt.plugins.JvmPlugin:在应用中启用 sbt.plugins.CorePlugin:在应用中启用 sbt.plugins.JUnitXmlReportPlugin:在应用中启用

标签: scala jar sbt sbt-assembly


【解决方案1】:

将您的build.sbt 提升 1 级。它应该驻留在项目根目录中,而不是 project

build.sbt 也可以在 project 文件夹中,这意味着不同的东西。阅读Organizing Build 文档以获得一些见解。

UPD:正如@marios 所建议的那样,您是否也可以将解析器放入您的 build.sbt 中。此外,为您的构建设置 SNAPSHOT 版本也很重要。您的build.sbt 的全部内容应如下:

scalaVersion in ThisBuild := "2.11.7"

lazy val commonSettings = Seq(
  organization := "com.example",
  version := "0.1.0-SNAPSHOT"
)

lazy val app = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "fat-jar-test"
  ).
  enablePlugins(AssemblyPlugin)

resolvers in Global ++= Seq(
  "Sbt plugins"                   at "https://dl.bintray.com/sbt/sbt-plugin-releases",
  "Maven Central Server"          at "http://repo1.maven.org/maven2",
  "TypeSafe Repository Releases"  at "http://repo.typesafe.com/typesafe/releases/",
  "TypeSafe Repository Snapshots" at "http://repo.typesafe.com/typesafe/snapshots/"
)

然后,再添加两个文件到root/project 文件夹:

root/project/build.properties 包含一行:

sbt.version=0.13.7

root/project/plugins.sbt 也包含一行:

addSbtPlugin("com.eed3si9n"       %  "sbt-assembly"            % "0.12.0")

现在,删除您的 root/project/assembly.sbt 文件(虽然用它代替 plugins.sbt 很好,但让我们尝试一下 - 这个配置对我总是有效的)。

现在,您的项目布局应如下所示:

root
  |
  build.sbt
  src
  project
    |
    plugins.sbt
    build.properties

重新加载 sbt 并尝试plugins 命令。你应该在那里看到sbtassembly.AssemblyPlugin

【讨论】:

  • 我试过这个,只是改回这个。完全相同的错误。我将编辑问题以反映这一点。
  • 这个答案非常接近正确,所以我不想添加新地址。你的 build.sbt 文件需要在你的根目录中。解析器语句也应该在你的 build.sbt 中,而不是在插件 sbt 文件中。
  • @marios 我也试过了,根据你的建议我把它放回了 build.sbt。到目前为止,没有任何可能的组合起作用,我得到了同样的错误。 Roman 在主要问题下要求在 cmets 中输出插件。从那里看来,该插件未列出。
  • 您需要添加enablePlugins(AssemblyPlugin)
  • 这很有帮助。对我来说,缺少的项目是 root/project/plugins.sbt 文件。感谢您的帮助!
【解决方案2】:

同样的问题发生在我身上。 我有正确的文件和文件夹结构。

我犯的错误是从 myproject/project 文件夹运行 sbt 程序集。 尝试从顶级项目文件夹运行相同的命令。 从 C:\Users*\IdeaProjects\untitled9 运行 不是来自 C:\Users*\IdeaProjects\untitled9\project

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多