我尝试使用sbt
将工件发布到AWS CodeArtifact
,但遇到了一些问题;
给定一个sbt
项目,运行命令sbt publish
,包被上传到repo,但它仍然处于Unfinished
状态。AWS CodeArtifact文档说:
未完成:最后一次发布尝试未完成。目前只有Maven包版本可以有未完成的状态。当客户端上传包版本的一个或多个资产,但没有发布包含该版本的包的maven-metadata.xml文件时,可能会发生这种情况。
我使用的是1.3.3
版本的sbt
,我没有使用插件,属性publishMavenStyle
是true
。
我知道sbt-maven-resolver
(here仓库)解决了这个问题,但它似乎是一个“未关注的插件”,而且,使用它我失去了所有关于发布过程的日志,我不相信它。
有没有人遇到过同样的问题,并以某种方式解决了这个问题?
3条答案
按热度按时间yx2lnoni1#
使用CodeArtifact和SBT
1.使用CodeArtifact设置SBT
1.使用SBT发布包(也避免工件处于
Unfinished
状态。)1.使用CodeArtifact设置SBT
1.使用Maven上游创建CodeArtifact存储库。在这个例子中,我们将在域启动中使用repository maven-test
1.在控制台中打开连接说明并选择mvn。我们稍后会需要这方面的信息。
1.从控制台复制导出“CODEARTIFACT_AUTH_TOKEN”环境变量的命令,并在您的环境中运行它。这将设置“CODEARTIFACT_AUTH_TOKEN”作为我们的存储库的密码,用户名始终是aws。
1.在build.sbt文件中导入sbt.Credentials:
1.现在我们需要设置凭据。为此,我们首先要读取CODEARTIFACT_AUTH_TOKEN环境变量:
1.接下来,我们将使用之前导入的sbt.Credentials设置一组新的Credentials:
传递给Credentials对象的值是(“domain-name/repository-name”,“repository hostname without protocol”,“username”,“password”),username始终是aws,password来自repoPass变量,我们只需要修改前两个来指向我们的repository。
1.现在我们只需要指示SBT使用我们的存储库作为解析器。控制台连接说明将生成Maven设置,例如:
我们将使用这些值在
build.sbt
文件中创建一个解析器:其格式为“resolvers +=“ID From maven configuration in console”at“Repository URL from maven configuration in console”。
1.要完全禁用公共Maven存储库的使用(强制使用CodeArtifact),可以将以下行添加到
build.sbt
文件:在执行了这些设置步骤之后,您应该能够运行
sbt update
并观察通过CodeArtifact下载的包。参考build.sbt示例:
2.发布包
除了拉取依赖项之外,SBT还可以用于发布包。要让SBT发布到CodeArtifact,我们首先需要在build.sbt文件中设置它:
将以下内容添加到文件中:
此时,从技术上讲,运行
sbt publish
会将包推送到CodeArtifact,但它最终会处于Unfinished
状态。我们需要使用sbt-maven-resolver插件来帮助获得正确格式的包:https://github.com/sbt/sbt-maven-resolver在project/plugins.sbt文件中添加以下行:
现在可以运行
sbt publish
并将包成功发布到CodeArtifact。如果看到错误,请确保您使用的是最新版本的SBT。ipakzgxi2#
你可以在不使用sbt-maven-resolver插件的情况下通过以下shariqmaws的答案来实现同样的效果。
发布将导致工件处于“未发布”状态。
然后使用aws codeartifact cli发布它(https://docs.aws.amazon.com/codeartifact/latest/ug/maven-curl.html)
kpbwa7wx3#
对我有用的是添加到project/plugins.sbt: