2012-05-15 19 views
5

Tengo un Nexus que está disponible a través de HTTPS. Solo los usuarios autorizados tienen derechos para acceder a él. Usando Maven, cuando todos los artefactos requeridos estén en repositorio local, podría incluso implementar artefactos de construcción. Pero cuando elimino algunos de los artefactos necesarios del repositorio local, la compilación falla.Maven no puede descargar artefactos de HTTPS Nexus con autenticación obligatoria

Downloading: https://example.com/nexus/content/groups/all/org/springframework/spring-test-mvc/1.0.0.BUILD-SNAPSHOT/spring-test-mvc-1.0.0.BUILD-SNAPSHOT.pom 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] example - project1 ..................................... SUCCESS [0.500s] 
[INFO] example - project2 ..................................... FAILURE [2.951s] 
[INFO] example - project3 ...................................... SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.599s 
[INFO] Finished at: Tue May 15 13:58:13 EEST 2012 
[INFO] Final Memory: 6M/121M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal on project example - project2: Could not resolve dependencies for project com.example:example-project:jar:1.2.0-SNAPSHOT: Failed to collect dependencies for [com.example:example-project:jar:1.2.0-SNAPSHOT (compile), org.springframework:spring-beans:jar:3.1.1.RELEASE (compile), org.springframework:spring-context:jar:3.1.1.RELEASE (compile), org.springframework:spring-core:jar:3.1.1.RELEASE (compile), org.springframework:spring-test:jar:3.1.1.RELEASE (test), org.springframework:spring-web:jar:3.1.1.RELEASE (compile), org.apache.httpcomponents:httpclient:jar:4.1.1 (test), org.codehaus.jackson:jackson-mapper-asl:jar:1.9.6 (compile), org.springframework:spring-test-mvc:jar:1.0.0.BUILD-SNAPSHOT (test), junit:junit:jar:4.10 (test), org.mockito:mockito-all:jar:1.9.0 (test), org.hamcrest:hamcrest-all:jar:1.1 (compile), org.slf4j:slf4j-api:jar:1.6.1 (compile), org.slf4j:slf4j-log4j12:jar:1.6.1 (compile), log4j:log4j:jar:1.2.16 (compile), log4j:apache-log4j-extras:jar:1.1 (compile)]: Failed to read artifact descriptor for org.springframework:spring-test-mvc:jar:1.0.0.BUILD-SNAPSHOT: Could not transfer artifact org.springframework:spring-test-mvc:pom:1.0.0.BUILD-SNAPSHOT from/to nexus (https://example.com/nexus/content/groups/all): Not authorized, ReasonPhrase:Unauthorized. -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException 
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command 
[ERROR] mvn <goals> -rf :grc-webclient-services 

No es el siguiente contenido en settings.xml de mi usuario:

<settings> 
<pluginGroups> 
    </pluginGroups> 
    <proxies> 
    </proxies> 
    <mirrors> 
     <mirror> 
     <id>nexus</id> 
     <mirrorOf>*</mirrorOf> 
     <url>https://example.com/nexus/content/groups/all</url> 
     </mirror> 
    </mirrors> 

    <profiles> 
     <profile> 

      <id>nexus</id> 

      <properties> 
       <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonardb?useUnicode=true&amp;characterEncoding=utf8</sonar.jdbc.url> 
       <sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName> 
       <sonar.jdbc.username>sonarusername</sonar.jdbc.username> 
       <sonar.jdbc.password>sonarpw</sonar.jdbc.password> 
       <sonar.host.url>http://localhost:9000/</sonar.host.url> 
      </properties> 


      <repositories> 
       <repository> 
        <id>central</id> 
        <url>https://example.com/nexus/content/groups/all</url> 
        <releases><enabled>true</enabled></releases> 
        <snapshots><enabled>true</enabled></snapshots> 
       </repository> 
      </repositories> 
      <pluginRepositories> 
       <pluginRepository> 
        <id>central</id> 
        <url>https://example.com/nexus/content/groups/all</url> 
        <releases><enabled>true</enabled></releases> 
        <snapshots><enabled>true</enabled></snapshots> 
       </pluginRepository> 
      </pluginRepositories> 

     </profile> 
    </profiles> 

    <servers> 
     <server> 
      <id>all</id> 
      <username>user</username> 
      <password>pw</password> 
     </server> 
     <server> 
      <id>releases</id> 
      <username>user</username> 
      <password>pw</password> 
     </server> 
     <server> 
      <id>snapshots</id> 
      <username>user</username> 
      <password>pw</password> 
     </server> 
    </servers> 

    <activeProfiles> 
     <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

</settings> 

Cuando descargué artefactos de este Nexus usando wget, he tenido que añadir --no-check-certificado de clave a omita el certificado del servidor (porque está autofirmado), y después de eso podría descargarlo usando wget.

Tecleo la clave Java -Dsun.security.ssl.allowUnsafeRenegotiation = cierto, pero no cambió nada en absoluto.

Después de eso me encontré con que no es tal vez un problema de certificado autofirmado porque yo he añadido el certificado del servidor a la lista de confianza con el comando:

keytool -keystore $JAVA_HOME/jre/lib/security/cacerts -import -file certificate.cer 

¿Alguien tiene una idea de cómo puedo descargar artefactos de Nexus en el tiempo de construcción?

+0

la parte rusa fue un poco difícil de entender :-) Pero has [esta guía] (http: //maven.apache .org/guides/mini/guide-repository-ssl.html)? – Paaske

+0

No estoy seguro de si el comentario anterior cubre lo que necesita. Si solo se trata de acceder al repositorio en un servidor con un certificado autofirmado, agregar el certificado al almacén de claves de Java debería ser suficiente. – Paaske

+0

Ya he agregado uno. Quizás no de la manera correcta. ¿Cómo puedo verificar que se haya agregado el certificado? También analicé el tráfico usando WireShark mientras estoy conectado a Nexus, veo el paquete Encription Alert con SSL Content-type: Alert (21). –

Respuesta

4

que tenía que cambiar

<server> 
     <id>all</id> 
     <username>user</username> 
     <password>pw</password> 
    </server> 

a

<server> 
     <id>nexus</id> 
     <username>user</username> 
     <password>pw</password> 
    </server> 

donde 'nexo' es el identificador de mi espejo en la parte superior de settings.xml.

-3

Añadir vagón-http-ligera extensión, Niza Explicación

Best solution to maven proxy configure

+1

Agregue un poco de contenido y explicación al cuerpo de la respuesta en lugar de simplemente vincular a otro sitio para que los usuarios lean – Crowie

Cuestiones relacionadas