unlpam universidades tesis snrd sistema repositoriosdigitales repositorios repositorio nacional mincyt ley generic dnet digitales scala maven sbt ivy nexus

scala - universidades - sbt: publicar en el repositorio corporativo de Nexus no autorizado



snrd (2)

Ivy usa el dominio del encabezado WWW-Authenticate, que tendrá que coincidir byte por byte igual al configurado en su archivo de credenciales.

sbt-aether-deploy usa el mismo encabezado, pero usa Aether como su mecanismo de implementación. Ivy no lo hace.

La forma más sencilla de averiguar el valor del encabezado WWW-Authenticate es utilizar cURL.

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

cURL le pedirá un usuario y pase.

-v agregará verbosidad para que pueda ver los encabezados de la solicitud y la respuesta.

Resolución rapida

La credencial requerida espera el reino exacto según lo definido por nexus. Vea a continuación cómo encontrar el que ha definido, pero sin duda es "Sonatype Nexus Repository Manager". Agregue el resto de los detalles a las credenciales como de costumbre.

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

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

credenciales de build.sbt + = Credenciales (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") }

Problema

Estoy tratando de publicar un tarro en un repositorio de nexus corporativo.

Soy capaz de hacer esto bien de Maven, y he configurado los repositorios para poder usar Nexus para proporcionar tarros internos. Sin embargo, la publicación falla debido a la autorización.

> 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

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

Mi configuración de 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>

He seguido las instrucciones del documento oficial y varias otras publicaciones, incluida StackOverflow como esta o one lista de correo como this . Ninguno funciono He intentado habilitar el registro adicional, pero no se dan más detalles.

Puedo desplegar manualmente a maven usando este comando:

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

Intenté usar el siguiente publishTo, también sin suerte.

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

Los comandos se ejecutan en forma correcta hasta que necesiten ser autorizados, en cuyo punto fallan.

El Reino en las credenciales, ¿corresponde al ID del Repositorio del Servidor en maven o al Nombre? O bien o no funciona.

He estado intentando habilitar más registros para Ivy, pero no pude obtener más detalles.

set ivyLoggingLevel: = UpdateLogging.Full

De acuerdo con esto, debería haber más registro:

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

Estoy detrás de un proxy interno, por lo que necesito configurar tanto el usuario HTTP como el usuario y la contraseña HTTPS. Tal vez es aquí donde se está bloqueando?

¿Alguna sugerencia de cómo aumentar el nivel de registro de hiedra?

Actualizar

Tengo algo para trabajar, usando el sbt-aether-deploy , que usa la infraestructura de Maven (wagon) para desplegar.

Las credenciales son exactamente las mismas. De hecho, el reino no parecía importar.

Las siguientes son las líneas utilizadas:

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

Algo no está bien entre el proxy, la hiedra y el nexo.

Todavía estaría interesado en sugerencias para usar hiedra.

Actualización adicional:

Utilizando

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

Pude llegar al servidor.

El mismo resultado que especifica el proxy a usar (está configurado para omitir las redes locales, pero algunos procesos Java como SBT parecen requerir los encabezados)

Cuando nexusUser: nexusPassword no se especificaron, obtuve el siguiente encabezado:

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

efectivamente, ese era el problema, las credenciales requerían que el nombre del Reino fuera el encabezado exacto, a diferencia de otro nombre de repositorio personalizado como lo define Maven.

¡Muchas gracias!


Sospecho que la ruta del archivo de credenciales puede ser incorrecta. Intenta cambiar esto:

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

a ese:

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

o intente solucionar directamente primero:

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

Si esto no funciona, compruebe que sus credenciales son válidas.