【发布时间】:2012-04-15 00:45:33
【问题描述】:
作为explained here,可以使用maven 部署到Amazon S3。
我们如何对 sbt 做同样的事情,即用 sbt 发布到 S3?
【问题讨论】:
标签: amazon-web-services amazon-s3 sbt ivy
作为explained here,可以使用maven 部署到Amazon S3。
我们如何对 sbt 做同样的事情,即用 sbt 发布到 S3?
【问题讨论】:
标签: amazon-web-services amazon-s3 sbt ivy
这是我编写的用于发布到 Amazon S3 的 SBT 插件:https://github.com/frugalmechanic/fm-sbt-s3-resolver
它类似于已经提到的sbt-s3-resolver,但它是 Apache 2.0 许可的(而不是 AGPL),并且在 Maven Central 上可用。它也更易于使用和配置。
publishTo := Some("S3" at "s3://s3-us-west-2.amazonaws.com/YOUR_BUCKET/repo")
resolvers += "S3" at "s3://s3-us-west-2.amazonaws.com/YOUR_BUCKET/repo"
只需将其添加到您的项目/plugins.sbt 文件中:
addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.19.0")
有多种方法可以配置 AWS 凭证,这些凭证记录在 GitHub Page 中。
一种方法是创建一个 ~/.sbt/.s3credentials,如下所示:
accessKey = XXXXXXXXXX
secretKey = XXXXXXXXXX
插件将自动获取凭据文件,您将能够解析和发布。
【讨论】:
这个问题已经很老了,所以你可能已经找到了一些解决方法,但这个答案可能对其他人有用。
我们的团队也遇到过这样的问题,我们刚刚为此创建了一个 sbt 插件:sbt-s3-resolver。我们使用了一段时间,它似乎工作正常。可以
查看readme 中的使用说明,如果缺少某些内容,请打开问题。
【讨论】:
我能够使用 sbt-s3 插件让它工作
这是一个例子:
import sbt._
import Keys._
import play.Project._
import com.typesafe.sbt.S3Plugin._
import S3._
import sbtassembly.Plugin.AssemblyKeys
import sbtassembly.Plugin.AssemblyKeys._
import sbtassembly.Plugin.assemblySettings
import sbtassembly.Plugin.MergeStrategy
import sbtbuildinfo.Plugin._
object ApplicationBuild extends Build {
val appName = "og-ws"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
anorm,
"com.netflix.astyanax" % "astyanax-cassandra" % "1.56.28",
"com.netflix.astyanax" % "astyanax-thrift" % "1.56.28",
"com.netflix.astyanax" % "astyanax-entity-mapper" % "1.56.28")
val main = (
play.Project(appName, appVersion, appDependencies)
settings (s3Settings: _*)
settings (assemblySettings: _*)
settings (
// call its setters to configure it, see api docs above etc.
publish := (),
publishLocal := (),
mappings in upload <<= dist map { distFile =>
Seq(distFile -> "snapshot/%s/%s/%s-%s.zip".format(appName, appVersion, appName, appVersion))
},
host in upload := "plaor.maven.s3.amazonaws.com",
credentials += Credentials(Path.userHome / ".s3credentials")))
}
【讨论】:
s3Settings的内容吗?
我还没有尝试过,但是通过查看 api 文档,这可能有效:
project/lib/中下载jar,或者将"org.springframework.aws" % "spring-aws-ivy" % "1.0"放入project/build.sbt)。将此添加到您的 build.sbt:
{
val s3r = new org.springframework.aws.ivy.S3Resolver
// call its setters to configure it, see api docs above etc.
publishTo := Some(new sbt.RawRepository(s3r)
}
同样,我还没有尝试过这个,但是因为 publishTo 是 SettingKey[Option[Resolver]],并且 RawRepository 扩展了 Resolver 并采用了 org.apache.ivy.plugins.resolver.DependencyResolver,并且 S3Resolver 实现了 DependencyResolver,所以我是猜测它会起作用。
毕竟,sbt 实际上只是 Apache Ivy 的一个包装器。
【讨论】:
我也必须从我们的构建工具上传一个程序集 jar 到 s3 存储桶。 @dres 的回答帮助我朝着正确的方向前进。
我在build.sbt 文件中使用了以下内容。
如您所见,这里我使用了sbt-assembly 中可用的SettingKey[String] 值
// s3Upload
import S3._
s3Settings
mappings in upload := Seq(
(assemblyOutputPath in assembly).value ->
s"${name.value}/${version.value}/${(assemblyJarName in assembly).value}"
)
host in upload := "my-bucket.s3.amazonaws.com"
S3.progress in S3.upload := true
assemblyOutputPath in assembly 为您提供程序集 jar 文件的完整输出路径assemblyJarName in assembly 为您提供程序集生成的 jar 名称。.value 从 SBT 密钥中获取实际值这会将程序集 jar 上传到 name/version/name-assembly-version.jar 下的 my-bucket,使用命令 sbt s3Upload。
请注意,我还在环境中设置了我的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。查询凭证的顺序可以在here找到。
【讨论】: