sbt: публикация в корпоративном репозитории Nexus несанкционированная

быстрое разрешение

требуемые учетные данные ожидают точную область, определенную nexus. См. ниже, Как найти тот, который вы определили, но, скорее всего, это "Sonatype Nexus Repository Manager". Добавьте остальные данные в учетные данные как обычно.

c:/data/user/.sbt/.верительные грамоты

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

построить.sbt учетные данные += учетные данные (путь.userHome / ".sbt" / ".верительные грамоты")

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

Я пытаюсь опубликовать банку в корпоративном РЕПО nexus.

Я могу сделать это отлично от Maven, и я настроил репозитории, чтобы иметь возможность использовать Nexus для предоставления внутренних банок. Однако публикация не выполняется из-за авторизации.

> publish
[info] Packaging c:apptargetscala-2.10app_2.10-0.1-sources.jar ...
[info] Wrote D:apptargetscala-2.10app_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:apptargetscala-2.10ivy-0.1.xml
[info] Packaging D:apptargetscala-2.10app_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/.верительные грамоты

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

c:/data/user/.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.в 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:apptargetscala-2.10app_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 или имени? Или не сработает.

Я пытался включить больше журналов для Ivy, но не смог получить более подробную информацию.

установить ivyLoggingLevel: = UpdateLogging.Полный

согласно этому, должно быть дальнейшее ведение журнала:

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

я смог добраться до сервера.

тот же результат, указывающий прокси-сервер для использования (он настроен на обход для локальных сетей, но некоторые процессы java, такие как SBT, похоже, требуют заголовков)

когда nexusUser: nexusPassword не были указаны, я получал следующий заголовок:

WWW-аутентификация: базовая realm= "Sonatype Nexus Repository Manager"

фактически, это была проблема, учетные данные требовали, чтобы имя области было тем точным заголовком, В отличие от другого пользовательского имени репозитория, такого как Maven defines.

большое спасибо!

2 ответов


Ivy использует область заголовка WWW-Authenticate, который должен будет соответствовать байту за байтом, равному тому, который настроен в вашем файле учетных данных.

sbt-aether-deploy использует тот же заголовок, но использует эфир в качестве механизма развертывания. Айви не.

самый простой способ выяснить значение заголовка WWW-Authenticate-использовать cURL.

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

cURL предложит вам пользователя и пройти.

- v добавит многословие, так что вы будете иметь возможность видеть заголовки запроса и ответа.


Я подозреваю, что ваш путь к файлу учетных данных может быть неправильным. Попробуйте изменить это:

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

если они не работают, проверьте, что ваши учетные данные действительны.