SBT:发布企业的Nexus仓库未经授权(sbt: publish to corporate Nex

2019-09-02 04:28发布

快速解决

所需的凭证预计由关系定义的确切境界。 请参阅下面如何找到您所定义的一个,但肯定是“Sonatype的的Nexus仓库管理器”。 详情其余添加到凭据为正常。

C:/data/user/.sbt/.credentials

realm=Sonatype Nexus Repository Manager
host=nexus
user=repouser
password=password

build.sbt凭证+ =凭证(Path.userHome / “名.bst”/ “.credentials”)

publishTo <<= version { v: String =>
  val nexus = "http://nexus/" 
  if (v.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "content/repositories/libs-snapshots")
  else
    Some("releases" at nexus + "content/repositories/libs-releases")
  }

问题

我想发布一个罐子到公司的关系回购。

我能够从Maven的做精,我已经配置了存储库,以能够使用的Nexus提供内部罐子。 然而,出版由于授权失败。

> publish
[info] Packaging c:\app\target\scala-2.10\app_2.10-0.1-sources.jar ...
[info] Wrote D:\app\target\scala-2.10\app_2.10-0.1.pom
[info] :: delivering :: com.app#app_2.10;0.1 :: 0.1 :: release :: Tue May 07 18:28:44 BST     2013
[info] Done packaging.
[info]  delivering ivy file to D:\app\target\scala-2.10\ivy-0.1.xml
[info] Packaging D:\app\target\scala-2.10\app_2.10-0.1.jar ...
[info] Done packaging.
[trace] Stack trace suppressed: run last *:publish for the full output.
[error] (*:publish) java.io.IOException: Access to URL http://nexus/content/groups/common/com/app/app_2.10/0.1/app_2.10-0.1.pom was refused by the server: Unauthorized

C:/data/user/.sbt/.credentials

realm=X 
host=nexus
user=repouser
password=password

C:/data/user/.sbt/repositories

 [repositories]
  local
  x-repo: http://nexus/content/groups/common
  typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/,     [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]   
  sbt-plugin-releases: http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/
  maven-central

应用程序/ build.sbt

 name := "app"

 organization := "com.app"

 version := "0.1"

 scalaVersion := "2.10.1"

 libraryDependencies ++= Seq(
"org.scalatest" % "scalatest_2.10" % "2.0.M5b" % "test"
 )

 EclipseKeys.withSource := true

 publishMavenStyle := true

 credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

 publishTo := Some("X Maven Repo" at "http://nexus/content/groups/common")

我的Maven的settings.xml

 <mirrors>
 <mirror>
  <id>x-repo</id>
  <name>X Maven repo</name>
      <url>http://nexus/content/groups/common</url>
  <mirrorOf>*</mirrorOf>
 </mirror>
 </mirrors>

 <servers>
     <server>
       <id>x-repo</id>
       <username>repouser</username>
       <password>password</password>
     </server>
   </servers>

我按照指示,从官方文档等各个岗位,包括StackOverflow的这等一个或邮件列表,如这个 。 无工作。 我试图使额外的日志记录,但没有进一步的细节中给出。

我可以手动部署使用此命令到Maven:

 mvn deploy:deploy-file -Durl=http://nexus/content/repositories/libs-snapshots -DrepositoryId=x-repo -DgroupId=com.app -DartifactId=app -Dpackaging=jar -Dversion=0.1-SNAPSHOT -Dfile=D:\app\target\scala-2.10\app_2.10-0.1.jar

使用以下publishTo试过,也没有运气

publishTo <<= version { v: String =>
  val nexus = "http://nexus/" 
  if (v.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "content/repositories/libs-snapshots")
  else
    Some("releases" at nexus + "content/repositories/libs-releases")
  }

这些命令,直到他们需要被授权,在这一点上,他们无法运行正常。

在凭证的境界,它对应于服务器库ID在行家或名称? 无论是或不工作。

我一直试图让常春藤更多的记录,但不能得到更多的细节。

设置ivyLoggingLevel:= UpdateLogging.Full

根据这一点,应该有进一步的记录:

https://svn.apache.org/repos/asf/ant/ivy/core/tags/2.2.0/src/java/org/apache/ivy/util/url/IvyAuthenticator.java

我后面的内部代理服务器,所以我需要同时设置HTTP用户和HTTPS用户名和密码。 也许是在这里,它被阻塞?

任何建议,就如何提高常春藤日志记录级别?


更新

我已经得到的东西的工作,通过使用SBT-以太网部署的插件,它使用Maven的基础设施(旅行车)进行部署。

证书是完全一样的。 事实上,境界似乎没有关系。

下面是所用的线:

    credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

publishTo <<= version { v: String =>
  val nexus = "http://nexus/"
    if (v.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "content/repositories/libs-snapshots")
  else 
    Some("releases" at nexus + "content/repositories/libs-releases")
}

seq(aetherSettings: _*)

seq(aetherPublishSettings: _*)

东西是不是代理,常春藤和Nexus之间权利。

我仍然有兴趣在建议使用常春藤。


进一步更新:

运用

curl -X POST http://nexusUser:nexusPassword@nexus/content/repositories/libs-snapshots -v

我能到达服务器。

同样的结果,指定代理服务器使用(它的配置为对于本地网络,但像一些SBT Java进程似乎需要头)

当nexusUser:nexusPassword没有specificied,我居然也得到了以下标题:

WWW身份验证:基本境界=“Sonatype的的Nexus仓库管理器”

有效的,这是问题,需要的凭据王国的名称是确切的标题,而不是其他的自定义库的名字像行家定义。

非常感谢!

Answer 1:

常春藤使用WWW-Authenticate头,这将有匹配字节的字节到一个在您的凭据配置文件相同的境界。

SBT-以太网部署使用相同的标题,但使用以太作为其部署机制。 常春藤没有。

搞清楚WWW-Authenticate头的值的最简单的方法是通过使用卷曲。

curl -X POST http://nexus/content/repositories/libs-snapshots -v > /dev/null

卷曲会提示你输入用户和通过。

-v将增加冗长,所以你将能够看到请求和响应的头。



Answer 2:

我怀疑你的证书文件路径可能不正确。 尝试改变这一点:

credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

于:

credentials += Credentials("c:/data/user/.sbt/.credentials")

或者直接尝试先解决:

credentials += Credentials("Sonatype Nexus Repository Manager", 
  "nexus.scala-tools.org", "admin", "admin123") 

如果这些不工作检查您的凭证是有效的。



文章来源: sbt: publish to corporate Nexus repository unauthorized