2012-07-22 33 views
14

Tengo nginx para mi repositorio maven con autorización básica.solucionador de dependencias sbt con autenticación básica

Mi build.sbt tiene:

credentials += Credentials("maven repository", "rep.com", "sbt", "password") 

resolvers ++= Seq(
    "maven repository" at "http://rep.com:8080/" 
) 

pero, SBT no puede encontrado módulo de SBT, porque no utiliza autorización básica.

Mis registros nginx parece:

012/07/22 20:02:21 [error] 3338#0: *14 no user/password was provided for basic authentication, client: 8.32.39.29, server: rep.com, request: "HEAD /some/cool_2.9.1/0.1-SNAPSHOT/cool_2.9.1-0.1-SNAPSHOT.pom HTTP/1.1", host: "rep.com:8080" 

no quiero publicar artefactos a través nginx. La autenticación básica solo necesita acceso restringido a artefactos.

¿Cómo puedo restringir el acceso y trabajar con el repositorio en sbt?

+2

He encontrado [esta discusión] (http://comments.gmane.org/gmane.comp.lang.scala.simple-build-tool/4055) que puede ser de ayuda, pero IMO, no lo hace contiene suficientes detalles para reproducir la solución, por lo que sería maravilloso, si alguien profundiza y proporciona una respuesta detallada. –

+0

¿Puede detallar qué detalles faltan? La respuesta de Harald en ese hilo me parece directa: asegúrate de que el reino coincida. La respuesta a esto de sebastien sugiere usar el sistema apropiado 'javax.net.debug = all' para descubrir el reino de la autenticación. –

Respuesta

18

¿Qué hay de añadir lo siguiente a su ~/.ivy2/.credentials:

realm=maven repository 
host=rep.com:8080 
user=username 
password=password 

y luego usar Credentials(Path.userHome/".ivy2"/".credentials")

es necesario asegurarse de que su dominio está configurado correctamente: curl http://rep.com:8080 -vv 2>&1 | egrep "realm|host" (puedo estar equivocado, pero 'anfitrión' puede que tenga que coincidir con el encabezado de host, i .e. rep.com: 8080, no solo rep.com).

hth

+0

No necesita ingresar el archivo .credentials. Yo era el anfitrión que no hacía cola, ese era el problema. – jsuereth

+1

Este enfoque ahora se ha agregado a los documentos SBT. http://www.scala-sbt.org/0.13/docs/Publishing.html – Brett

+0

La expresión grep no usa el uso esperado del caso: curl http://rep.com:8080 -vv 2> & 1 | egrep -i "realm | host" -> Se espera que el resultado tenga 2 líneas como esta: -> Anfitrión: nexus.eu -> WWW-Authenticate: BASIC realm = "Sonatype Nexus Repository Manager" – Sylvain

-1

No sabe si funciona, pero sólo trato de añadir la autenticación básica en la URL:

resolvers ++= Seq(
    "maven repository" at "http://username:[email protected]:8080/" 
) 
+0

Lo probé antes, obtuve java.net.MalformedURLException –

+0

Lo siento, valió la pena intentarlo ... –

1

tuve el mismo problema con un repositorio SVN que utiliza AUTH básica. Esta publicación y la aludida anteriormente me dieron la respuesta que resumiré a continuación.

Como se mencionó más arriba todo es cuestión de conseguir el reino correcta:

En build.sbt puse mi resolución de la siguiente manera:

resolvers += { 
Credentials.add("<realm>", "<svnhost?", "<username>", "<password>") 
Resolver.url("name", url("http://<svnhost>/<path>/"))(Resolver.ivyStylePatterns) 
} 

para encontrar el valor reino que es el primer parámetro de Credenciales .add, lo hice

curl http://<svn host> -v 

y se utiliza el valor Realm básico reportado en la cabecera WWW-Authenticate:

WWW-Authenticate: Basic realm="<realm>" 

Espero que esto ayude.

Cuestiones relacionadas