Montando un repositorio Maven con Artifactory

Introducción

Maven es una herramienta de construcción de codigo para java. Uno de los beneficios de maven es que ayuda a reducir la duplicación de librerías (jars) requeridas durante la generación de un proyecto. Para ello la sugerencia de maven es almacenar todas las librerías en un repositorio central.

Maven usa por defecto el repositorio publico ibiblio.org. Este repositorio es lento y, en ocasiones, no dispone de las librerias que necesitamos, bien sea por que la versión no ha sido actualizada o por que el desarrollador no las ha subido o por que esas librerías las hemos desarrollado nosotros.

Es aquí donde entra en juego la creación de un repositorio interno de maven, de este modo tendremos un lugar donde meter las librerías que sean de nuestra propia creación, así como aquellas que no encontremos en ibiblio.org.

La elección de artifactory ha sido en función de los comentarios de otros bloggers acerca de ella, de modo que únicamente hemos probado artifactory y archiva.

Entorno de desarrollo con un repositorio interno de maven

Maven internal repository

Creando el repositorio maven

Lo primero es cumplir estos requisitos:

Esto es lo que haremos:

  1. Descomprimimos artifactory
  2. Modificamos el archivo de configuracion para añadir un nuevo repositorio
  3. Testeamos artifactory empleando jetty (muy sencillo)
  4. Desplegamos el war de artifactory en tomcat (si es que ya tenemos un tomcat instalado)

Estructura de directorios de artifactory

Una vez descomprimido, el artifactory nos genera una estructura similar a esta:

  • backup – Directorio donde se realiza el backup del repositorio
  • bin – Contiene los ejecutables para usar artifactory con jetty
  • data – Contiene la base de datos derby (vacio en una instalación nueva)
  • etc – Archivos de configuración
  • lib – Contiene los jars de los que depende artifactory
  • logs – Archivos de log
  • webapps – Contiene el war que necesitaremos para instalar en el tomcat

Configurar el nuevo repositorio interno

Necesitaremos tocar el archivo etc/artifactory.config.xml, creamos un repositorio añadiendo las siguientes lineas:

<localRepository>
<key>queres-repository</key>
<description>Queres internal repository</description>
<handleReleases>true</handleReleases>
<handleSnapshots>true</handleSnapshots>
</localRepository>

<remoteRepositories>
<remoteRepository>
<key>ibiblio</key>
<handleReleases>true</handleReleases>
<handleSnapshots>false</handleSnapshots>
<excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern>
<url>http://repo1.maven.org/maven2</url>
</remoteRepository>
</remoteRepositories>

El primero es nuestro repositorio privado y el segundo es una cache del ibiblio, de este modo cachearemos los jars que usemos mas frecuentemente.

Testeamos artifactory empleando jetty

Desde el directorio bin/ ejecutamos artifactory.sh , que lanza un servidor jetty en el puerto 8081, al que podemos acceder a través de la url http://localhost:8080/artifactory con el usuario admin/password.

Deberíamos probar a navegar por el repositorio aunque en principio debería estar vacio, unicamente se va llenando de artefactos una vez que el cliente los solicite.

Despliegue en tomcat

Para desplegar el artifactory en tomcat unicamente debemos hacer 2 cosas:

  1. Copiar el artifactory.war en el directorio webapps de nuestro tomcat
  2. Indicar al tomcat que el artifactory tendrá su “base” en el directorio donde lo hemos descomprimido (/opt/artifactory en nuestro caso), para ello añadiremos al startup.sh de tomcat esta linea:

export JAVA_OPTS=”${JAVA_OPTS} -Dartifactory.home=/opt/artifactory”

Configurando maven para que use nuestro recien creado repositorio

Para que nuestro proyecto maven haga uso de el repositorio creado debemos añadir las siguientes lineas a nuestro pom.xml o si lo queremos para todos los proyectos a nuestro ~/.m2/settings.xml :

<repositories>
<repository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories>

Añadiendo artefactos a nuestro repositorio

Esto se puede realizar a través de la interface web de manera sencilla, unicamente debemos usar el link “Deploy an artifact” , subir el jar y cubrir la información básica de ese artefacto.

Otro metodo de subir los artefactos es a través de la linea de comandos con maven, para instala un jar a nuestro repositorio, debemos de ejecutar este comando:

mvn deploy:deploy-file -DrepositoryId=queres-repository -Durl=http://localhost:8080/artifactory/queres-repository
-DgroupId=test -DartifactId=test -Dversion=1.1 -Dpackaging=jar -Dfile=target/test-1.1.jar

y antes debemos establecer en el settings.xml nuestros provilegios de cara al repositorio:

<settings>
<servers>
<server>
<id>queres-repository</id>
<username>admin</username>
<password>password</password>
</server>
</servers>
</settings>

Referencias

http://www.theserverside.com/tt/articles/article.tss?l=SettingUpMavenRepository