Подтвердить что ты не робот

Sbt: публиковать в корпоративном хранилище Nexus неавторизованный

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

Требуемые учетные данные предполагают точную область, определенную с помощью 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")
  }

Проблема

Я пытаюсь опубликовать банку в корпоративном репозитории nexus.

Я могу сделать это отлично от 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")

My 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, таких как или список рассылки, например this. Никто не работал. Я попытался включить дополнительный журнал, но подробности не приводятся.

Я могу вручную развернуть 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 или имени? Либо это, либо не работает.

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

set 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-aether-deploy плагин, который использует инфраструктуру 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: _*)

Что-то не так между прокси, плющом и нексусом.

Меня все равно интересовали бы предложения использовать плющ.


Дальнейшее обновление:

Используя

curl -X POST http://nexusUser:[email protected]/content/repositories/libs-snapshots -v

Мне удалось связаться с сервером.

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

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

WWW-Authenticate: BASIC realm = "Менеджер репозитория Neatus сонатного типа"

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 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") 

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