将 CodeArtifact 与 SBT 结合使用
- 使用 CodeArtifact 设置 SBT
- 使用 SBT 发布包(也避免了工件在
Unfinished
state.)
1. 使用 CodeArtifact 设置 SBT
-
创建具有 Maven 上游的 CodeArtifact 存储库。对于此示例,我们将在域 launchops 中使用存储库 maven-test
-
在控制台中打开连接说明并选择 mvn。稍后我们将需要从中获取信息。
-
复制从控制台导出“CODEARTIFACT_AUTH_TOKEN”环境变量的命令并在您的环境中运行它。这会将“CODEARTIFACT_AUTH_TOKEN”设置为我们存储库的密码,用户名始终为 aws。
-
在 build.sbt 文件中导入 sbt.Credentials:
import sbt.{Credentials}
-
现在我们需要设置凭据。为此,我们首先要读取 CODEARTIFACT_AUTH_TOKEN 环境变量:
val repoPass = sys.env.get("CODEARTIFACT_AUTH_TOKEN").getOrElse("")
-
接下来,我们将使用之前导入的 sbt.Credentials 来设置一组新的 Credentials:
credentials += Credentials("launchops/maven-test", "launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com", "aws", repoPass)
传递给 Credentials 对象的值是(“域名/存储库名称”、“不带协议的存储库主机名”、“用户名”、“密码”),用户名始终是 aws,密码来自我们只需要的 repoPass 变量修改前两个以指向我们的存储库。
-
现在我们只需要指示 SBT 使用我们的存储库作为解析器。控制台连接指令将生成 Maven 设置,例如:
<repository>
<id>launchops--maven-test</id>
<url>https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test/</url>
</repository>
我们将使用这些值来创建一个解析器build.sbt
file:
resolvers += "launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test"
其格式为“resolvers += “控制台中的 Maven 配置的 ID”,位于“控制台中的 Maven 配置的存储库 URL”。
-
要完全禁用公共 Maven 存储库(强制使用 CodeArtifact),您可以将以下行添加到build.sbt
file:
externalResolvers := Resolver.combineDefaultResolvers(resolvers.value.toVector, mavenCentral = false)
执行这些设置步骤后,您应该能够运行sbt update
并观察通过 CodeArtifact 下载的包。
示例 build.sbt 供参考:
import sbt.{Credentials, Path}
name := "scala-test"
version := "0.3.0"
scalaVersion := "2.12.6"
organization := "com.abc.def"
val repoPass = sys.env.get("CODEARTIFACT_AUTH_TOKEN").getOrElse("")
credentials += Credentials("launchops/maven-test", "launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com", "aws", repoPass)
resolvers += "launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test"
libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "3.0.0" % "test",
"io.nats" % "jnats" % "2.0.0",
"org.json4s" %% "json4s-native" % "3.6.0"
)
2. 发布包
除了拉取依赖之外,SBT 还可以用于发布包。要将 SBT 发布到 CodeArtifact,我们首先需要在 build.sbt 文件中进行设置:
将以下内容添加到文件中:
publishMavenStyle := true
publishTo := Some("launchops--maven-test" at "https://launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com/maven/maven-test")
此时,从技术上讲,运行sbt publish
会将包推送到 CodeArtifact,但最终会出现在Unfinished
状态。我们需要使用 sbt-maven-resolver 插件来帮助获取正确格式的包:https://github.com/sbt/sbt-maven-resolver https://github.com/sbt/sbt-maven-resolver
在project/plugins.sbt 文件中添加以下行:
addSbtPlugin("org.scala-sbt" % "sbt-maven-resolver" % "0.1.0")
现在你可以运行sbt publish
并将包成功发布到 CodeArtifact。如果您看到错误,请确保您使用的是最新版本的 SBT。