如这里所解释的,我们可以使用maven将内容部署到Amazon S3。
那么,我们如何使用sbt来实现相同的功能,即使用sbt将内容发布到S3?
这是我编写的一个SBT插件,用于将内容发布到Amazon S3: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"
只需将以下内容添加到您的 project/plugins.sbt 文件中:
addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.19.0")
有多种方法可以配置 AWS 凭证,这些方法在 GitHub 页面中有所记录。
其中一种方法是创建一个 ~/.sbt/.s3credentials 文件,其内容如下:
accessKey = XXXXXXXXXX
secretKey = XXXXXXXXXX
凭据文件将被插件自动获取,您将能够解决和发布。
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
的内容吗? - expertproject/lib/
, or put "org.springframework.aws" % "spring-aws-ivy" % "1.0"
in project/build.sbt
).Add this to your 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 键中获取实际值。这将使用命令 sbt s3Upload
将汇编 jar 上传到 my-bucket
下的 name/version/name-assembly-version.jar
。
请注意,我还在环境中设置了我的 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
。可以在 这里 找到查找凭据的顺序。
resolvers += "FrugalMechanic Snapshots" at "s3://maven.frugalmechanic.com/snapshots"
,该库还活着吗? - expert