Как здесь объясняется, можно установить на Amazon S3 с maven.
Как мы можем сделать то же самое с sbt, то есть публиковать на S3 с помощью sbt?
Как здесь объясняется, можно установить на Amazon S3 с maven.
Как мы можем сделать то же самое с sbt, то есть публиковать на S3 с помощью sbt?
Вот плагин 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"
Просто добавьте это в файл вашего проекта /plugins.sbt:
addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.19.0")
Существует несколько способов настройки учетных данных AWS, которые описаны на странице GitHub.
Одним из методов является создание ~/.sbt/.s3credentials, которое выглядит следующим образом:
accessKey = XXXXXXXXXX
secretKey = XXXXXXXXXX
Файл учетных данных будет автоматически подобран плагином, и вы сможете разрешить и опубликовать его.
Вопрос довольно старый, так что, возможно, вы уже нашли некоторое обходное решение, но может быть, этот ответ будет полезен кому-то другому.
У нас также была такая проблема в нашей команде, и мы просто создали для этого sbt-plugin: 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")))
}
Я не пробовал это, но, глядя на api docs, это может сработать:
project/lib/
или поместить "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
extends Resolver
и принимает org.apache.ivy.plugins.resolver.DependencyResolver
, а S3Resolver
реализует DependencyResolver
, я предположив, что это сработает.
В конце концов, sbt действительно просто обертка вокруг Apache Ivy.
Мне тоже пришлось загружать сборку jar в ведро s3 из нашего инструмента сборки. Ответ @dres помог мне пойти в правильном направлении.
Я получил его работу со следующим в build.sbt
файле.
Как вы можете видеть, здесь я использовал значения SettingKey[String]
, доступные в sbt-assembly
// 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
дает имя баннера, созданное сборкой..value
, чтобы получить фактическое значение из клавиш SBTЗагружает сборку в my-bucket
в name/version/name-assembly-version.jar
с помощью команды sbt s3Upload
.
Обратите внимание, что я также установил мои AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
в среде. Порядок поиска учетных данных можно найти здесь.
Я использовал уже упомянутые два плагина (https://github.com/ohnosequences/sbt-s3-resolver и https://github.com/frugalmechanic/fm-sbt-s3-resolver), но в итоге я написал свой собственный:
https://github.com/munchii/sbt-s3-resolver
Здесь выборка функций, которые уникальны и/или уже упомянуты другими ответами: