lunes, 21 de septiembre de 2009

Crea tu propio repositorio Maven con Apache Archiva

Apache Archiva es una herramienta de gestión de repositorios de artefactos de construcción. Entre otras características, Apache Archiva permite:
  • Crear tu propio repositorio, donde almacenar tus propios artefactos.
  • Hacer de proxy de repositorios remotos, reduciendo el tráfico de red en equipos de trabajo. Cada desarrollador podría descargar los artefactos necesarios de un repositorio de la red local gestionado por Apache Archiva, que sería el que se descargase de los repositorios externos los artefactos necesarios una sola vez.
  • Gestionar la seguridad del repositorio en base a usuarios o roles.

Apache Archiva se puede descargar de dos formas, como un ejecutable o como un war. Por sencillez, usaré el ejecutable.

Una vez descargado el archivo .zip que contiene el ejecutable, podemos descomprimirlo donde queramos. Después, desde el directorio bin de la estructura de ficheros generada, hay que ejecutar la secuencia:
  • archiva install
  • archiva start

Cuando queramos parar, basta con teclear:
  • archiva stop

Con el servidor arrancado, podemos acceder a la interfaz de usuario en la URL http://localhost:8080/archiva. La primera vez que accedamos habrá que crear el usuario administrador. Una vez creado, yase puede empezar a trabajar con la herramienta.

Archiva crea dos repositorios locales, internal y snapshots, que podemos ver en el apartado de administración Repositories:

En el repositorio internal se desplegarán las distribuciones finales de nuestros artefactos, y en snapshots, se despliegaran los artefactos que todavía estén en desarrollo.

Además, también existen otros dos repositorios remotos:

La configuración necesaria para que Apache Archiva pueda hacer de proxy de estos dos respositorios remotos está en el apartado de administración Proxy Conectors:

Cada uno de los conectores tiene la configuración para cada repositorio remoto. En el caso de que nuestra red local accediese a Internet a través de un proxy, habría que configurar nuestro proxy en el apartado Network Proxies y después asignarlo a los repositorios remotos en sus conectores.

Ahora, queremos que nuestros proyectos Maven accedan a los repositorios locales creados pr Apache Archiva, y además, que accedan a los repositorios remotos a través de esta herramienta. Para hacer que Archiva haga de repositorio único para nuestros proyectos Maven, hay que incluir la siguiente configuración en el fichero settings.xml de Maven:
<settings>
...
<mirrors>
<!—- Este es repositorio por defecto -->
<mirror>
<id>archiva.default</id>
<url>http://localhost:8080/archiva/repository/internal/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>archiva.apache.snapshots</id>
<url>http://localhost:8080/archiva/repository/snapshots/</url>
<mirrorOf>apache.snapshots</mirrorOf>
</mirror>
</mirrors>
...
</settings>

Si además queremos desplegar nuestros propios artefactos en los repositorios de Archiva, primero tenemos que crear un usuario de Archiva en el apartado User Management de la administración de la herramienta. Para que el usuario que creemos tenga permiso de escritura en un repositorio hay que asignarle el rol de manager en ese repositorio o de forma global para todos los repositorios

Después hay que incluir la siguiente configuración en el fichero settings.xml de Maven:
<settings>
...
<servers>
<server>
<id>archiva.internal</id>
<username>user</username>
<password>pwd</password>
</server>
<server>
<id>archiva.snapshots</id>
<username>user</username>
<password>pwd</password>
</server>
...
</servers>
...
</settings>

Y después incluir la siguiente configuración en el POM de nuestro proyecto:
<project>
...
<distributionManagement>
<repository>
<id>archiva.internal</id>
<name>Internal Release Repository</name>
<url>
http://localhost:8080/archiva/repository/internal/
</url>
</repository>
<snapshotRepository>
<id>archiva.snapshots</id>
<name>Internal Snapshot Repository</name>
<url>
http://localhost:8080/archiva/repository/snapshots/
</url>
</snapshotRepository>
</distributionManagement>
...
</project>

Tras esto, al hacer deploy en Maven de nuestros proyectos, se despliegará en el repositorio de Archiva.

Referencias:
Apache Archiva

3 comentarios:

  1. Muy interesante. Queremos implantar un repositorio de este tipo y estamos entre Nexus (http://nexus.sonatype.org/) y Archiva. Parece que tienen aproximadamente la misma funcionalidad y, además, Nexus se integra mejor con Eclipse. ¿Qué opinas de Nexus?

    Saludos.

    ResponderEliminar
  2. Pues, desgraciadamente, no te puedo decir nada sobre Nexus porque no lo he probado...

    ResponderEliminar
  3. Localhost no levanta archiva, ya esta instalado e iniciado, sabes cual podría ser el problema?
    Saludos.

    ResponderEliminar