【问题标题】:How do I get s3-upload to depend on (packageZipTarball in Universal)?如何让 s3-upload 依赖(通用中的 packageZipTarball)?
【发布时间】:2014-03-23 21:42:13
【问题描述】:

我想使用 s3-sbt 上传 package-zip-tarball 任务的结果(来自 sbt-native-packager)。

目前,我的build.sbt 的重要部分是这样的:

mappings in upload := Seq(( ((package-zip-tarball in Universal).value) ,"trailhunger2-1.0.tgz"))

host in upload := "trailhunger.s3.amazonaws.com"

credentials += Credentials(Path.userHome / ".s3credentials")

重新加载时,sbt 报告以下内容:

/Users/sarge/Documents/workspaces/TrailHunger/TrailHunger2/build.sbt:56: error: illegal start of simple expression
mappings in upload := Seq(( ((package-zip-tarball in Universal).value) ,"trailhunger2-1.0.tgz"))
                              ^
/Users/sarge/Documents/workspaces/TrailHunger/TrailHunger2/build.sbt:56: error: ')' expected but eof found.
mappings in upload := Seq(( ((package-zip-tarball in Universal).value) ,"trailhunger2-1.0.tgz"))
                                                                                                ^
[error] Error parsing expression.  Ensure that there are no blank lines within a setting.

更新:@SethTisue 回答后,我的代码现在显示为:

mappings in upload := Seq( ( (packageZipTarball in Universal).value ,"trailhunger2-1.0.tgz") )

很遗憾,我明白了:

error: not found: value packageZipTarball
mappings in upload := Seq( ( (packageZipTarball in Universal).value ,"trailhunger2-1.0.tgz") )
                              ^
[error] Type error in expression

我的期望是(packageZipTarball in Universal) 在控制台中与universal:packageZipTarball 做同样的事情。 .value 表示我可以获得 java.io.File 类型的任务的值。然后将其与字符串文字“trailhunger2-1.0.tgz”一起包含在 tuple2 中。然后,周围的 Seq 会生成一个恰好包含一个元素的序列。

我不明白为什么找不到值 packageZipTarball。

我已验证 show universal:packageZipTarball 返回我期望的文件名。

s3-sbt 是否太旧,无法支持新的 sbt 0.13 语法。在 Seq 中嵌套 this 不正确吗?

【问题讨论】:

  • @SethTisue 感谢您的回答。我仔细检查了,我一定是在复制错误消息时不小心按了]。 build.sbt 的那个部分没有方括号。 :-(

标签: sbt sbt-native-packager


【解决方案1】:

第 1 部分

你使用的是 sbt 0.12 还是 0.13?

在 sbt 0.12 及更早的版本中,在 sbt 的交互模式中键是 capitalized-like-this,但在构建定义中是 capitalizedLikeThis

在 sbt 0.13 中,capitalizedLikeThis 在两种情况下都被接受。 (capitalized-like-this 在交互模式下仍然被接受,但只是为了向后兼容。)

不管怎样,不管你用的是0.12还是0.13,都需要把package-zip-tarball改成packageZipTarball。 Scala 解析器认为前者意味着package - zip - tarball。而package 是一个关键字,这是您得到的错误的来源。

如果您使用的是 0.13,您可以完全忘记整个连字符的事情,因为现在已经无关紧要的历史怪癖了。

第 2 部分

我发现要编译packageZipTarball in Universal,您必须将import com.typesafe.sbt.packager.Keys._ 添加到build.sbt 的顶部。

sbt-native-packager 自述文件确实有几个使用 import 和以 com.typesafe.sbt.packager 开头的显式限定名称,所以至少有一点迹象表明可能需要这样的东西,但也许doc 应该更明确地指出它。

【讨论】:

  • 啊 - 我没有意识到我需要在 build.sbt 中使用不同的语法。我也没有意识到 0.13 变化如此之大。我已经升级到 sbt 0.13.1 并使用 camelCase 但我仍然遇到错误。我会更新这个问题,因为我认为一旦找到答案,就会对其他人有所帮助。
  • 哦,耶!现在它起作用了。非常感谢您回到这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 2016-08-14
  • 2020-10-26
  • 1970-01-01
  • 2017-12-09
  • 2014-12-11
  • 2021-07-18
  • 2020-02-14
相关资源
最近更新 更多