SBT 在发布到 Artifactory 时不传递凭据
SBT not passing credentials when publishing to Artifactory
我正在编写一个 Java 项目,我正在使用 SBT 自动构建和发布到 JFrog Artifactory。
每当需要发布到 Artifactory 时,我都想使用 Ivy 目录布局进行发布,并且显然将 Ivy XML 文件与 jar 一起发布。我设法通过在 build.sbt 文件中使用以下行来实现此目的:
crossPaths := false
publishTo := Some("Artifactory Realm" at "http://<Artifactory IP>:<Artifactory Port>/artifactory/org.project.my")
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
publishMavenStyle := false
然而,它仅在允许匿名用户部署到 Artifactory 时才有效。我意识到 sbt 并没有真正将我的凭据传递给 Artifactory,而是以匿名身份登录。
我的 $HOME/.ivy2/.credentials
文件如下所示:
realm=Artifactory Realm
host=http://<Artifactory IP>:<Artifactory Port>/artifactory/org.project.my
user=<my user name>
password=<my user name>
但是,如果我更改 Artifactory 配置以防止匿名用户部署新的 Artifacts,当我 运行 "sbt publish" 我得到以下输出:
[error] Unable to find credentials for [Artifactory Realm @ <Artifactory IP>].
java.io.IOException: Access to URL http://<Artifactory IP>:<Artifactory Port>/artifactory//org.project.my/org/project/my/project-my/1.0.0/project-my-1.0.0.jar was refused by the server: Unauthorized
Artifactory request.log 文件然后包含:
20160219011657|319|REQUEST|10.0.2.2|anonymous|PUT|/org.project.my/org/project/my/project-my/1.0.0/project-my-1.0.0.jar|HTTP/1.1|401|24978
我也尝试过手动传递凭据而不是使用文件:
credentials += Credentials("Artifactory Realm", "localhost", "<USERNAME>", "<PASS>")
但我得到了相同的结果。
知道我可能遗漏了什么吗?
尝试:
host=<Artifactory IP>
旧答案(无效):
host=<Artifactory IP>:<Artifactory port>
我有一个不同的问题:我在 .credentials
文件中设置了错误的 realm
。
查看 sbt
的错误输出,我发现我应该使用:
realm=Artifactory Realm
错误显示 realm
和 host
的预期值:
[error] Unable to find credentials for [Artifactory Realm @ myhost].
我正在编写一个 Java 项目,我正在使用 SBT 自动构建和发布到 JFrog Artifactory。
每当需要发布到 Artifactory 时,我都想使用 Ivy 目录布局进行发布,并且显然将 Ivy XML 文件与 jar 一起发布。我设法通过在 build.sbt 文件中使用以下行来实现此目的:
crossPaths := false
publishTo := Some("Artifactory Realm" at "http://<Artifactory IP>:<Artifactory Port>/artifactory/org.project.my")
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
publishMavenStyle := false
然而,它仅在允许匿名用户部署到 Artifactory 时才有效。我意识到 sbt 并没有真正将我的凭据传递给 Artifactory,而是以匿名身份登录。
我的 $HOME/.ivy2/.credentials
文件如下所示:
realm=Artifactory Realm
host=http://<Artifactory IP>:<Artifactory Port>/artifactory/org.project.my
user=<my user name>
password=<my user name>
但是,如果我更改 Artifactory 配置以防止匿名用户部署新的 Artifacts,当我 运行 "sbt publish" 我得到以下输出:
[error] Unable to find credentials for [Artifactory Realm @ <Artifactory IP>].
java.io.IOException: Access to URL http://<Artifactory IP>:<Artifactory Port>/artifactory//org.project.my/org/project/my/project-my/1.0.0/project-my-1.0.0.jar was refused by the server: Unauthorized
Artifactory request.log 文件然后包含:
20160219011657|319|REQUEST|10.0.2.2|anonymous|PUT|/org.project.my/org/project/my/project-my/1.0.0/project-my-1.0.0.jar|HTTP/1.1|401|24978
我也尝试过手动传递凭据而不是使用文件:
credentials += Credentials("Artifactory Realm", "localhost", "<USERNAME>", "<PASS>")
但我得到了相同的结果。
知道我可能遗漏了什么吗?
尝试:
host=<Artifactory IP>
旧答案(无效):
host=<Artifactory IP>:<Artifactory port>
我有一个不同的问题:我在 .credentials
文件中设置了错误的 realm
。
查看 sbt
的错误输出,我发现我应该使用:
realm=Artifactory Realm
错误显示 realm
和 host
的预期值:
[error] Unable to find credentials for [Artifactory Realm @ myhost].