使用 sbt 将工件发布到 AWS CodeArtifact

2024-03-07

我正在尝试将工件发布到AWS CodeArtifact using sbt,但我遇到了一些麻烦;

给定一个sbt项目,运行命令sbt publish包已上传到存储库,但仍保留在Unfinished状态。 AWS CodeArtifact文档 https://docs.aws.amazon.com/codeartifact/latest/ug/packages-overview.html#package-version-status says:

未完成:上次尝试发布未完成。目前,只有 Maven 包版本的状态可以为“未完成”。当客户端上传某个包版本的一个或多个资产但没有发布包含该版本的包的 maven-metadata.xml 文件时,可能会发生这种情况。

我在用着sbt在版本1.3.3,我没有使用插件,该属性publishMavenStyle is true.

我知道sbt-maven-resolver (here https://github.com/sbt/sbt-maven-resolverrepo)解决了这个问题,但它似乎是一个“未关注的插件”,而且,使用它我会丢失有关发布过程的所有日志,我不信任它。

有人有同样的问题并以某种方式解决了吗?


将 CodeArtifact 与 SBT 结合使用

  1. 使用 CodeArtifact 设置 SBT
  2. 使用 SBT 发布包(也避免了工件在Unfinished state.)

1. 使用 CodeArtifact 设置 SBT

  1. 创建具有 Maven 上游的 CodeArtifact 存储库。对于此示例,我们将在域 launchops 中使用存储库 maven-test

  2. 在控制台中打开连接说明并选择 mvn。稍后我们将需要从中获取信息。

  3. 复制从控制台导出“CODEARTIFACT_AUTH_TOKEN”环境变量的命令并在您的环境中运行它。这会将“CODEARTIFACT_AUTH_TOKEN”设置为我们存储库的密码,用户名始终为 aws。

  4. 在 build.sbt 文件中导入 sbt.Credentials:

     import sbt.{Credentials}
    
  5. 现在我们需要设置凭据。为此,我们首先要读取 CODEARTIFACT_AUTH_TOKEN 环境变量:

     val repoPass = sys.env.get("CODEARTIFACT_AUTH_TOKEN").getOrElse("")
    
  6. 接下来,我们将使用之前导入的 sbt.Credentials 来设置一组新的 Credentials:

     credentials += Credentials("launchops/maven-test", "launchops-123456789012.d.codeartifact.us-east-1.amazonaws.com", "aws", repoPass)
    

传递给 Credentials 对象的值是(“域名/存储库名称”、“不带协议的存储库主机名”、“用户名”、“密码”),用户名始终是 aws,密码来自我们只需要的 repoPass 变量修改前两个以指向我们的存储库。

  1. 现在我们只需要指示 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”。

  1. 要完全禁用公共 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sbt 将工件发布到 AWS CodeArtifact 的相关文章

  • 检查更新时 Maven 无限期挂起

    我正在使用 Maven 构建一个项目 我是新手 并且它挂起 mvn package INFO Scanning for projects INFO INFO Building Presentation Reports INFO task s
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 如何使用 AWS Glue 开始处理从 Web 服务终端节点提取的数据?

    更多源数据来自我需要定期轮询的 Web 服务端点 获得数据后 我可以使用 pyspark 执行传统的 ETL 并最终将数据写入 S3 和 Redshift 我不确定如何进行初始提取 甚至不确定我应该在 AWS Glue 文档中查找什么内容
  • Maven 按顺序构建所有内容

    我有一个项目 其中所有项目都有一个父 pom 定义如下
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 如何将域添加到 aws 上的现有 SSL 证书

    我有一个与 Amazon Web Services 上的负载均衡器关联的 SSL 证书 我想在该证书上有一个额外的域 我的问题是 是否可以向 aws 上现有的 ssl 证书添加额外的域 我发现您可以在创建证书时添加其他名称 但我不知道如何使
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 如何在 sbt 控制台中加载 scala 文件? [复制]

    这个问题在这里已经有答案了 可能的重复 将 Scala 文件加载到解释器中以使用函数 https stackoverflow com questions 7383436 load scala file into interpreter to
  • 如何执行仅匹配正则表达式的测试?

    在 sbt 0 10 1 中 我经常使用test only缩小我的测试数量 sbt gt test only com example MySpec 但是 我想缩小范围 以便只运行名称 描述与正则表达式匹配的测试 是否有一些语法可以实现这样的
  • 获取SettingKey[T]的值

    我正在开发一个用于文档生成的插件 我想将所有生成的文件输出到我选择的目录中 该目录可以是SBT的子目录target目录 如下 val newTargetDirectory SettingKey File document target di
  • 通过 boto3 承担 IAM 用户角色时访问被拒绝

    Issue 我有一个 IAM 用户和一个 IAM 角色 我正在尝试将 IAM 用户配置为有权使用 STS 承担 IAM 角色 我不确定为什么收到 访问被拒绝 错误 Details IAM 角色 arn aws iam 123456789 r
  • 如何从 AWS SAM 本地 docker 实例连接到主机 MySQL?

    我正在尝试使用调用我的 Lambda 函数sam local invoke但发现无法连接到我的主机MySQL 我尝试添加 docker network host但也无法连接 Traceback most recent call last F
  • java.lang.IllegalStateException - 提交响应后无法创建会话

    我在我的项目中使用 JSF PrimeFaces 我为此准备了一个Maven项目 当我编译项目并加载主页后 我收到以下异常 java lang IllegalStateException Cannot create a session af
  • Spring JMS监听器即使在异常时也会确认

    我正在使用 JMS 向 SQS 队列发送 接收消息 但是即使在使用 client acknowledge 时出现异常 我也无法重新传递消息 如何实现这一目标 我尝试了一个简单的测试 JmsListener destination test
  • 如何在AWS策略中提供多个StringNotEquals条件?

    我正在尝试编写 AWS S3 存储桶策略 拒绝所有流量 除非来自两个 VPC 的流量 我正在尝试编写的策略如下所示 两者之间有逻辑与StringNotEquals 除非这是无效的政策 Version 2012 10 17 Id Policy
  • 将消息从 AWS Lambda 发布到 AWS IoT

    我正在尝试使用 Nodejs 将消息从 AWS Lamba 发布到 AWS IoT 我已压缩该项目并上传到 AWS IoT 下面是代码片段 var awsIot require aws iot device sdk var device a
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • 适用于 Hadoop 的 DynamoDB 输入格式

    我必须使用 Hadoop mapreduce 处理保留在 Amazon Dynamodb 中的一些数据 我在互联网上搜索 Dynamo DB 的 Hadoop InputFormat 但找不到它 我对 Dynamo DB 不熟悉 所以我猜测
  • Swagger for Micronaut 与 Maven

    我想从 Spring Boot 2 切换到 Micronaut 框架 而且我在 Swagger 设置上遇到了困难 在 Spring Boot 2 项目中 我有以下依赖项

随机推荐

  • 如何在本地使用 Lambda Layers 测试 AWS SAM 应用程序?

    我正在使用 AWS SAM 和 API Gateway 创建一个 API 以将请求传递到多个 Lambda 处理程序函数 我在它们之间共享代码 因此我想使用 Lambda 层来避免重写冗余代码 在创建任何实际的 AWS 资源之前 我首先在本
  • Vertex AI 模型批量预测、引用云存储上的现有模型和输入文件的问题

    我正在努力正确设置 Vertex AI 管道 该管道执行以下操作 从 API 读取数据并存储到 GCS 并作为批量预测的输入 获取现有模型 Vertex AI 上的视频分类 使用点 1 的输入创建批量预测作业 正如您将看到的 我对 Vert
  • 移动开发 - 本机 VS 跨平台 VS JavaScript [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • React Typescript:看起来您正在尝试使用 TypeScript,但没有安装 TypeScript

    我想创建一个 React 应用程序 并且想在这个应用程序中使用 typescript 首先我访问了 React 网站 以便使用 typescript 创建一个应用程序 我发现我必须先将此指令放入终端中 npx create react ap
  • 测试存储过程的最佳方法是什么?

    像许多要求所有访问都通过存储过程进行的公司一样 我们似乎有很多业务逻辑被锁定在存储过程中 这些东西实在是很难测试 而且有些已经变得愚蠢又长了 是否有人拥有一套最佳实践 可以让您更轻松地自信地测试这些东西 目前 我们维护着 30 个左右的 问
  • WPF 将文件从 Windows 资源管理器拖放到 TreeView 上

    我正在尝试制作一个非常简单的程序 或者我认为的程序 将文件从桌面 资源管理器拖放到 wpf 树视图上 此示例中的树视图很简单 因此我可以隔离遇到的拖放问题 我已经将所有地方的AllowDrop设置为True 但我仍然无法触发Drop或Dra
  • 如何在不离开页面的情况下更改浏览器中的 URL?

    我现在正在编写一个复杂的 AJAX 应用程序 整个网站都有干净的 URL 目前 PHP 为每个页面创建基本布局 但我不想在用户单击链接时离开每个页面 并且我不想在 URL 中包含哈希 因为它不会 与网站的其余部分不相符 我知道这个问题以前在
  • 从 2d numpy 数组的每一行中选择随机非零元素

    我有一个二维数组 a array 5 0 1 0 0 1 3 5 2 3 0 0 4 0 2 4 3 2 0 3 和一维数组 b array 1 2 1 2 2 which b 告诉我们要从数组的每一行中选择多少个非零元素a 例如 b 0
  • Notepad++ 缓存文件位置

    在最新版本的 Notepad 上 当应用程序关闭时 重新启动应用程序时会保留未保存的文件 我认为这些文件缓存在临时文件中 该文件的位置是什么 谢谢 我自己注意到了 并在里面找到了文件backup文件夹 您可以检查它在哪里使用菜单 设置 gt
  • 碰撞检测布料js

    我正在使用 Fabric js 我使用以下函数将图像放在画布上 当我单击画布时 图像会放置在该位置 我想知道是否有方法可以检查天气 那里已经存在某些东西我点击的位置 特别是如果有其他图像或没有 document getElementById
  • PHP 数组和 HTML 表单下拉列表

    我有一个名为 categories 的简单 PHP 数组 如下所示 Array Closed gt P1000 Open gt P1001 Pending gt P1002 In Progress gt P1003 Requires App
  • 如何使用 swift 调用 size_t os_proc_available_memory(void)

    我从来没有从 Swift 调用 Obj C 函数 而且我看到的大部分信息都是用于导入框架等 所以我很难理解如何获取我需要的数据 我想获得我的应用程序可用的总可用内存 我所能找到的就是https developer apple com doc
  • 如何使列表框水平滚动

    我有一个包含长字符串的列表框 The beginning is not all that relevant for the user which is why I d like to make the listbox scroll auto
  • 将登录表单与 Mechanize 结合使用

    我知道 Stackoverflow 上有与此非常相似的帖子 但我似乎仍然无法弄清楚我的尝试出了什么问题 login to the site mech get base URL do page l page form with action
  • winform的动态数据

    我玩过动态数据网站 winform 有类似的东西吗 如果没有任何东西可以对 winform 做同样的事情 那么问题是为什么不呢 我们有一个庞大的 ERP 应用程序 我们希望将其从 AS400 迁移到 Net Winform应用程序 我最初的
  • 宏元编程

    我知道这可能是坏的或不可能的 但由于这不是递归宏 我认为它应该是可能的 define FOO 15 define MAKE BAR x BAR x define MY FOO BAR MAKE BAR FOO 我希望 MY FOO BAR
  • 仅使用平移和旋转将一组 2d 点与另一组 2d 点对齐

    我正在 OpenCV 中工作 但我认为没有这方面的功能 我可以找到一个用于查找仿射变换的函数 但是仿射变换包括缩放 而我只想考虑旋转 平移 想象一下 我有两组 2d 点 假设每组恰好有 50 个点 例如 设 A x1 y1 x2 y2 x5
  • 颜色图中的 -Inf —— MATLAB 中低,Python 中高?

    我已将一些 MATLAB 代码移植到 Python 其中包括一个绘图实用程序 用于绘制 2D 矩阵 列表 中某些数据的颜色图 MATLAB 和 Python 绘图实用程序非常相似 因此我可以毫不费力地使它们在视觉上非常接近地匹配 我在这里使
  • getItemPosition 何时应考虑项目位置的更改?

    Android 的 PagerAdapter 类中 getItemPosition 方法的文档指出它是 当主视图尝试确定项目的位置是否已更改时调用 应该调用此方法来指示该适配器的项目组中的项目位置是否已更改 但是 它从未说明重写方法何时应考
  • 使用 sbt 将工件发布到 AWS CodeArtifact

    我正在尝试将工件发布到AWS CodeArtifact using sbt 但我遇到了一些麻烦 给定一个sbt项目 运行命令sbt publish包已上传到存储库 但仍保留在Unfinished状态 AWS CodeArtifact文档 h