【问题标题】:How to publish to Amazon S3 with sbt如何使用 sbt 发布到 Amazon S3
【发布时间】:2012-04-15 00:45:33
【问题描述】:

作为explained here,可以使用maven 部署到Amazon S3。

我们如何对 sbt 做同样的事情,即用 sbt 发布到 S3?

【问题讨论】:

    标签: amazon-web-services amazon-s3 sbt ivy


    【解决方案1】:

    这是我编写的用于发布到 Amazon S3 的 SBT 插件:https://github.com/frugalmechanic/fm-sbt-s3-resolver

    它类似于已经提到的sbt-s3-resolver,但它是 Apache 2.0 许可的(而不是 AGPL),并且在 Maven Central 上可用。它也更易于使用和配置。

    发布到 S3

    publishTo := Some("S3" at "s3://s3-us-west-2.amazonaws.com/YOUR_BUCKET/repo")
    

    从 S3 解析

    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 凭证

    有多种方法可以配置 AWS 凭证,这些凭证记录在 GitHub Page 中。

    一种方法是创建一个 ~/.sbt/.s3credentials,如下所示:

    accessKey = XXXXXXXXXX
    secretKey = XXXXXXXXXX
    

    插件将自动获取凭据文件,您将能够解析和发布。

    【讨论】:

    • 我喜欢你的解决方案,tpunder;它需要此处列出的所有解决方案中最少的配置。
    • 唯一对我有用的解决方案! (解决 s3 上的 maven repo)谢谢!
    • 没有 scala 2.11 版本:/
    • @botchniaque 你想做什么? AFAIK SBT 仍然使用 Scala 2.10 作为插件。
    • @botchniaque 是的。我已经在 Scala 2.10、2.11 和 2.12 项目上使用了该插件,没有任何问题。
    【解决方案2】:

    这个问题已经很老了,所以你可能已经找到了一些解决方法,但这个答案可能对其他人有用。

    我们的团队也遇到过这样的问题,我们刚刚为此创建了一个 sbt 插件:sbt-s3-resolver。我们使用了一段时间,它似乎工作正常。可以

    • 将 ivy/maven 工件发布到 S3(私有/公共)存储桶
    • private 存储桶中解析 ivy 工件(因为您可以从公共存储桶中使用标准 sbt 解析器进行解析)

    查看readme 中的使用说明,如果缺少某些内容,请打开问题。

    【讨论】:

    • 虽然这个插件看起来正是我所需要的,但不幸的是,它的许可证对于商业用途有点问题......我的公司说“AGPL 3.0 即使作为工具也永远不会被批准。”......
    • 这为我节省了很多时间——谢谢@laughedelic
    • @connor-doyle,很高兴它对你有用!
    • @michael-yakobi,我不确定我是否理解你的正确,但据我所知,APGLv3 不限制软件的使用,如果你分发它,它会限制你,改变代码等
    【解决方案3】:

    我能够使用 sbt-s3 插件让它工作

    https://github.com/sbt/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的内容吗?
    • 对不起,这是 8 年前的事了。似乎我使用并隐含了该对象,但我希望它只使用了 s3 凭据文件。
    【解决方案4】:

    我还没有尝试过,但是通过查看 api 文档,这可能有效:

    1. 获取http://www.jarvana.com/jarvana/view/org/springframework/aws/spring-aws-ivy/1.0/spring-aws-ivy-1.0-javadoc.jar!/org/springframework/aws/ivy/S3Resolver.html(见http://repo1.maven.org/maven2/org/springframework/aws/spring-aws-ivy/1.0/——你应该可以在project/lib/中下载jar,或者将"org.springframework.aws" % "spring-aws-ivy" % "1.0"放入project/build.sbt)。
    2. 将此添加到您的 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)
      }
      

    同样,我还没有尝试过这个,但是因为 publishToSettingKey[Option[Resolver]],并且 RawRepository 扩展了 Resolver 并采用了 org.apache.ivy.plugins.resolver.DependencyResolver,并且 S3Resolver 实现了 DependencyResolver,所以我是猜测它会起作用。

    毕竟,sbt 实际上只是 Apache Ivy 的一个包装器。

    【讨论】:

      【解决方案5】:

      我也必须从我们的构建工具上传一个程序集 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_IDAWS_SECRET_ACCESS_KEY。查询凭证的顺序可以在here找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2012-02-07
        • 1970-01-01
        • 2018-02-08
        • 2021-11-04
        • 2011-10-25
        • 2014-09-10
        相关资源
        最近更新 更多