22

迅速な解決

必要な資格情報には、nexus によって定義された正確なレルムが必要です。定義したものを見つける方法を以下に示しますが、最も確実なのは「Sonatype Nexus Repository Manager」です。通常どおり、残りの詳細を資格情報に追加します。

c:/data/user/.sbt/.credentials

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

build.sbt 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")
  }

問題

jar を企業のネクサス リポジトリに公開しようとしています。

私はMavenからこれをうまく行うことができ、Nexusを使用して内部jarを提供できるようにリポジトリを構成しました。ただし、承認により公開は失敗します。

> 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:/データ/ユーザー/.sbt/リポジトリ

 [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

app/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")
  }

コマンドは、認証が必要になるまで正常に実行されますが、認証が必要になった時点で失敗します。

資格情報のレルムは、maven または名前のサーバー リポジトリ ID に対応していますか? どちらか、または機能しません。

Ivy のログをさらに有効にしようとしましたが、詳細を取得できませんでした。

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 ユーザーとパスワードの両方を設定する必要があります。もしかして、ここがブロックされているのでしょうか?

アイビーロギングのレベルを上げる方法について何か提案はありますか?


アップデート

Maven インフラストラクチャ (ワゴン) を使用してデプロイする sbt-aether-deployプラグインを使用することで、何かが機能します。

資格情報はまったく同じです。実際、領域は問題ではないようでした。

使用される行は次のとおりです。

    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: _*)

プロキシ、アイビー、ネクサスの間で何かが正しくありません。

アイビーを使用する提案にはまだ興味があります。


さらに更新:

使用する

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

サーバーにアクセスできました。

使用するプロキシを指定する同じ結果 (ローカル ネットワークをバイパスするように構成されていますが、SBT などの一部の Java プロセスではヘッダーが必要なようです)

nexusUser:nexusPassword が指定されていない場合、次のヘッダーを取得していました。

WWW-Authenticate: BASIC realm="Sonatype Nexus Repository Manager"

事実上、それが問題でした。認証情報では、Maven 定義のような他のカスタム リポジトリ名とは対照的に、Realm の名前がその正確なヘッダーである必要がありました。

どうもありがとう!

4

2 に答える 2

3

資格情報ファイルのパスが間違っている可能性があります。これを変更してみてください:

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") 

これらが機能しない場合は、資格情報が有効であることを確認してください。

于 2013-05-07T19:58:59.063 に答える