如何解决sbt凭证的使用问题?

时间:2014-12-09 17:48:53

标签: sbt nexus

我需要从安全的内部Nexus OSS存储库中检索依赖项。

我现在不需要进行任何部署,只需要获取依赖项,但我没有运气。

这是我的 build.sbt 文件:

credentials += Credentials("Sonatype Nexus Repository Manager", "repo.server.com", "admin", "admin123") 

libraryDependencies += "group" % "artifact" % "1.0.0"

是Nexus返回的域名。

这是我的〜/ .sbt / repositories 文件:

[repositories]
  local
  releases: https://repo.server.com:8110/nexus/content/repositories/releases/
  ivy-releases: https://repo.server.com:8110/nexus/content/groups/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  custom-public: https://repo.server.com:8110/nexus/content/groups/custom-public

我有三个回购:

  1. custom-public 对匿名用户开放。我没有包含releases回购。
  2. ivy-releases 是一个包含Typesafe ivy releasesSBT plugin releases的群组。它也是公开的,并且根据this guide中的建议与custom-public分开。
  3. 版本仅限某些用户使用。
  4. 这是我的 SBT_OPTS 环境变量:

    set SBT_OPTS=-Dsbt.override.build.repos=true -Xmx1024M -Xss20m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m -Dsbt.log.format=true -Djavax.net.ssl.trustStore=~/trust.jks -Djavax.net.ssl.trustStorePassword=passs
    

    SBT发现公共回购没有问题。但我无法从受限制的回购下载任何依赖。它给出了以下错误:

    [warn]  module not found: group#artifact;1.0.0
    [warn] ==== local: tried
    [warn]   C:\Documents and Settings\gferrari\.ivy2\local\group\artifact\1.0.0\ivys\ivy.xml
    [warn] ==== releases: tried
    [warn]   https://repo.server.com:8110/nexus/content/repositories/releases/group/artifact/1.0.0/artifact-1.0.0.pom
    [warn] ==== ivy-releases: tried
    [warn]   https://repo.server.com:8110/nexus/content/groups/ivy-releases/group/artifact/1.0.0/ivys/ivy.xml
    [warn] ==== custom-public: tried
    [warn]   https://repo.server.com:8110/nexus/content/groups/custom-public/group/artifact/1.0.0/artifact-1.0.0.pom
    

    如果我在浏览器中尝试发布网址https://repo.server.com:8110/nexus/content/repositories/releases/group/artifact/1.0.0/artifact-1.0.0.pom,并且 admin 用户已登录,则会正确显示pom文件。

    我有什么选择来解决这个问题?

1 个答案:

答案 0 :(得分:0)

原来,生产网络服务器(Oracle iPlanet)中的jsessionid请求参数存在问题。

以下是我为解决问题所采取的措施:

  1. 我在Tomcat上运行的本地Nexus安装中镜像了服务器配置,运行正常。
  2. 然后我在两个安装上运行相同的命令(compile)并比较Nexus日志(级别DEBUG)。
  3. 在Tomcat的某个时刻,Nexus报告没有找到任何会话,并继续在http标头中搜索用户凭据。在iPlanet的同一点上,Nexus找到了匿名用户的有效会话,并且从未查看过http标头。
    • 这是禁止用户访问工件的原因。它被误认为是匿名用户。
  4. 关注this SO回答我在Nexus web.xml中添加了一个过滤器,使用Tuckey重写过滤器删除任何jsessionid参数。
  5. 更改后,服务器停止创建虚假会话,并开始在http标头中正确找到用户凭据。

    应该有一些iPlanet配置参数来更改jsessionid参数的行为。以上步骤只是我目前的解决方案。