#Bitbucket y repositorios #Maven

Generalmente cuando se hace algún tipo de libreria en Java se empaqueta en un artefacto .jar, para gestionar el ciclo de construcción de una aplicación (entre ellas la gestión de dependencias) se puede usar Maven u otra herramienta similar (ant, ivy, gradle).

Ahora bien para publicar los artefactos al equipo y dejarlos disponibles se puede usar un ftp, dav o un gestor completo como Artifactory o Nexus, sin embargo con soluciones como Bitbucket o Github es buena idea mantener todo junto (más aún si Bitbucket permite repositorios privados tanto en Mercurial como en Git).

Para ello simplemente tenemos que configurar en el pom.xml de nuestro proyecto para que haga un deploy local del artefacto y luego publicarlo en bitbucket (git) mediante el ciclo commit , push. Finalmente cuando se necesite usar la dependencia en otro proyecto solo hay que agregar la configuración de repositorios para descargar la dependencia. Por ahora un pom.xml de ejemplo:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.simmetrics</groupId>
  <artifactId>simmetrics</artifactId>
  <version>1.6.2</version>
  <packaging>jar</packaging>

  <name>simmetrics</name>
  <description>SimMetrics is a Similarity Metric Library, based on previous work by http://sourceforge.net/projects/simmetrics/</description>
  <url>https://bitbucket.org/Nickmancol/simmetrics</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <altDeploymentRepository>releases::default::${project.baseUri}/mavenRepo/releases/</altDeploymentRepository>
  </properties>
  
  <developers>
    <developer>
      <id>@Nickmancol</id>
      <name>Nicolas Bohorquez Gutierrez</name>
      <email>nicolas.bg@gmail.com</email>
      <timezone>America/Bogota</timezone>
    </developer>
  </developers>

  <scm>
    <connection>scm:hg:http://bitbucket.org/Nickmancol/simmetrics</connection>
    <developerConnection>scm:hg:http://bitbucket.org/Nickmancol/simmetrics</developerConnection>
    <url>http://bitbucket.org/Nickmancol/simmetrics</url>
  </scm>
  
  <distributionManagement>
	  <repository>
      <id>releases</id>
      <url>https://bitbucket.org/Nickmancol/simmetrics/raw/tip/mavenRepo/releases/</url>
	  </repository>
	  <snapshotRepository>
	  	<id>snapshots</id>
      <url>https://bitbucket.org/Nickmancol/simmetrics/raw/tip/mavenRepo/snapshots/</url>
	  </snapshotRepository>
  </distributionManagement>

	<build>
    <plugins>
    	<plugin>
	      <groupId>org.apache.maven.plugins</groupId>
	      <artifactId>maven-compiler-plugin</artifactId>
	      <version>2.3.2</version>
	      <configuration>
	        <source>1.5</source>
	        <target>1.5</target>
	      </configuration>
	    </plugin>
	    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
		</plugins>
  </build>
	
	<profiles>
		<profile>
			<id>deploy-snapshot</id>
			<properties>
				<altDeploymentRepository>snapshots::default::${project.baseUri}/mavenRepo/snapshots</altDeploymentRepository>
			</properties>
		</profile>
	</profiles>
	
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
    </dependency>
  </dependencies>
</project>

Corresponde a un proyecto para actualizar una librería para el cálculo de similitud entre dos cadenas de texto usando diferentes métricas, originalmente publicada en sourceforge (CVS) sin mantenimiento desde hace 5 años.

En las lineas 34 a 43 se declaran los repositorios para distribución del artefacto. En la linea 16 se declara la propiedad altDeploymentRepository que sobreescribe la publicación del artefacto en el repositorio por una ruta local directorio del proyecto/mavenRepo/releases cuando se ejecuta la tarea de maven deploy. Finalmente en las lineas 82 a 89 se declara un profile para sobreescribir la propiedad altDeploymentRepository cuando se hace deploy de un snapshot.

Infraestructura desarrollo gratis (I)

Una buena infraestructura ayuda a los equipos a sentirse a gusto y mejora la comunicación lo que hace mas fácil seguir una metodología de desarrollo ordenada y coherente, para ello existen actualmente muchas herramientas gratuitas. Estas son algunas alternativas:

Infraestructura gratis

Infraestructura gratis

  • Linux / freeBSD: Siempre un sistema operativo libre nos permite utilizar mejor los recursos físicos locales con los que contemos (y reutilizar hardware que no es de última generación).
  • Eclipse / Netbeans / Geany : Un entorno de desarrollo acorde con la tecnología que usemos para el proyecto ahorra tiempo en tareas comunes.
  • Google mail + docs + calendar / Zoho: Cuentas de correo con amplio espacio, cliente de mensajería instantánea e integración con documentos compartidos y organizados además de un calendario común mejoran la comunicación interna del equipo.
  • Wikidot / Google sites: Usar la documentación del proyecto como herramienta de conocimiento explícito y memoria del proyecto además de documentar desde el principio permite que la renovación y crecimiento del equipo humano sea más sencillo.
  • Bitbucket / Github / Xp-dev: El control de versiones de los productos / subproductos del proyecto junto con el manejo de incidencias permite que se mida el avance del proyecto.
  • AWS free: Un servidor común de administración propia con suficiente capacidad como para instalar un servidor de integración continua sin muchas complicaciones.
  • Maven / Ivy: La gestión de artefactos, dependencias, informes acerca del proyecto (pruebas unitarias, pruebas de integración, cobertura de las pruebas, etc) de forma común y centralizada permite hacer un seguimiento de la calidad de los productos / subproductos desde el principio.
  • Jenkins / Continuum: Un servidor de integración continua permite detectar fallos, centralizar pruebas, generar releases de forma automatizada.
  • Twitter: Comunicarse de forma rápida y sucinta con el equipo desde cualquier dispositivo móvil en cualquier momento.
  • Ifttt: If This Then That, permite integrar múltiples servicios web de forma ultra fácil.

En próximos post espero describir la forma de integrar varias de estas herramientas.