【问题标题】:Getting sbt-assembly working让 sbt-assembly 工作
【发布时间】:2012-06-14 19:56:19
【问题描述】:

到目前为止,我一直在使用 SBT(通过 Typesafe 堆栈)编译我的 Scala 项目。我现在想通过sbt-assembly 在多台机器上运行代码。按照指示,我所做的唯一一项更改是在我的project/Build.scala 文件中。以下是相关部分:

resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases",
resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases",
libraryDependencies += "com.eed3si9n" % "sbt-assembly" % "0.8.3"

但是,当我运行 sbt compile 时,我得到了这个错误:

sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly/scala_2.9.1/sbt_0.11.2;0.8.3: not found.

我做错了什么?

谢谢!

编辑 在与Build.scala 相同的文件夹中创建了一个build.sbt 文件(文件夹为/project/)并在其中包含这两行:

Seq[Setting[_]](resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases",
                addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3"))

现在错误是:

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.eed3si9n#sbt-assembly;0.8.3: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]      com.eed3si9n:sbt-assembly:0.8.3 (sbtVersion=0.11.2, scalaVersion=2.9.1)
[warn] 
[error] {file:/Users/myname/current/projectname/project/}default-d7da9a/*:update: sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly;0.8.3: not found

编辑 2 嗯,我成功sbt compile之后,是不是只能进入sbt控制台输入assembly

> assembly
[error] Not a valid command: assembly
[error] Not a valid project ID: assembly
[error] Not a valid configuration: assembly
[error] Not a valid key: assembly
[error] assembly
[error]   

EDIT 3 JK 明白了。必须添加 GitHub README 中指定的 build.sbt 信息。

【问题讨论】:

  • “GitHub README 中指定的信息” - 请提供链接?

标签: scala jar sbt typesafe-stack sbt-assembly


【解决方案1】:

这里有两点。一个是 SBT 插件不仅仅是 库依赖项——特别是,它们使用当前 SBT 版本的方式与其他 Scala 库使用 Scala 版本的方式类似。另一个是project/Build.scala中的libraryDependencies会影响项目的依赖,而不是build的依赖。

SBT 完整构建本身就是一个 SBT 项目,仅位于目录树的下一层,因此可以像正常构建一样配置自己的构建。与在少数情况下需要进行“完整构建”的正常构建不同,几乎没有理由使用完整构建进行构建,因此几乎总是使用位于 project/ 中的 .sbt 文件足够了。

另一个问题是版本控制。 SBT 有一个名为addSbtPlugin 的实用函数,它可以为您处理所有事情。它需要一个 moduleID 并添加所有必要的 SBT 和 Scala 版本信息。

因此,要让 sbt-assembly 在完整构建中工作,您需要在 project/(通常是 project/build.sbtproject/plugins.sbt)下创建一个 .sbt 文件,并将构建的解析器和依赖项放在那里:

resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

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

【讨论】:

  • addSbtPlugin 的参数格式是什么?我会为sbt-assembly 做什么?
  • addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3"),因此您的 build.scala 中处理设置的部分应如下所示: Seq[Setting[_]](resolvers += ..., resolvers += ..., addSbtPlugin(...))`
  • 实际上,我突然想到你可能把它放在了错误的文件中。如果这是 project/Build.scala,那么把它放在那里根本没有用(它会声明你的 源代码 依赖于 sbt-assembly,而不是项目)。要让项目使用它,请将其设置放在 project/build.sbt 或 project/project/Build.scala 中(最好是前者,因为几乎没有理由为项目的元构建使用完整构建)。
  • 嗯,我是在整个settings 分配中执行Seq[Setting[_]],还是只为sbt-assembly 插件执行部分? 编辑刚收到你的新消息..让我再试一次。
  • 那么我是否应该在与我的Build.scala 文件相同的文件夹中创建一个build.sbt,添加这两行,然后执行sbt compile
猜你喜欢
  • 2020-05-18
  • 2020-05-17
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2014-12-11
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多