Blog de Antonio Manuel Muñiz

Curiosidades y peculiaridades de Maven y Java

26 Marzo 2009 · Dejar un comentario

Seguro que todos nos hemos encontrado con ciertas peculiaridades de las herramientas que usamos día a día, pero encontrarse con dos (de las buenas) en un solo día, eso no tiene precio ;) sobre todo cuando el tema te quita medio día.

Son sólo detalles, pero si se dan las condiciones precisas… puede ser un quebradero de cabeza.

Cuando hay dos clases con el mismo FQN (Fully Qualified Name) en el classpath, ¿cuál de las dos se carga? Pues la respuesta es que depende, con Java 1.5 puede ser una, y con Java 1.6 puede ser otra. Resulta que tenía en mi classpath tres versiones de commons-collections (fruto de descontrol con las dependencias transitivas). Si ejecutaba los tests con Java 1.5 todo iba bien, se estaba usando commons-collections-3.1 (que era la versión que yo tanía en mi POM). Pero si usaba Java 1.6 resulta que se cargaba commons-collections-2.1.1 y uno de los métodos que se llamaba por reflexión no existía en esta versión pero sí en la 3.1. La solución, estudiar de donde viene esa dependencia transitiva y excluirla en el POM para que no haya diferentes versiones de un mismo artefacto.

¿Por qué no me aparecen los enlaces a los módulos hijos en el Maven Site? Mi proyecto tenía la estructura típica de un proyecto Maven multimódulo. Configuré los ficheros site.xml para que en el Maven site se pueda navegar mediante enlaces desde el proyecto padre a los hijos y viceversa. Resulta que los enlaces no aparecen. El problema resultó ser que en los POM de los módulos hijos tenía una etiqueta <url> y su contenido era el mismo que en el POM padre, quitando este nodo en los POM de los hijos… problema resuelto. Cuanto menos, curioso.

En fin, el primero de los problemas lo detecté rápido mirando las dependencias transitivas de mi proyecto con Q4E. El segundo fué más bien suerte y gracias alguna incidencia en Codehaus que hablaba de la influencia en el site de la etiqueta <url>.

→ Deja un ComentarioCategorías: Herramientas · Java
Etiquetado: , , ,

Participación en IMAGINATICA 2009

6 Marzo 2009 · 1 comentario

Ayer GMV realizó una ponencia en IMAGINATICA 2009 y  tuve la oportunidad de poder participar en la misma.
En mi intervención intenté expresar a un colectivo de alumnos de la Universidad de Sevilla (estudiantes de Ingeniería Informática mayoritariamente) cómo entendemos el Software Libre en GMV. Comenté nuestra participación en proyectos Open Source que forman parte de nuestro ecosistema software como Continuum, proyecto en el que mi compañero José Morales está trabajando, o Sonar, para el que estamos desarrollando una nueva funcionalidad de la que yo mismo me estoy ocupando.

Sigo pensando que ese peldaño que hay entre la Universidad y la Empresa es demasiado alto, cuando se habla de herramientas como Trac o Subversion en un foro universitario… desgraciadamente pocos las conocen (desde luego yo tampoco las conocía cuando estudiaba). Quizás no estaría demás alguna asignatura orientada en este sentido.

imaginatica-logo

→ 1 comentarioCategorías: Open Source · Profesional
Etiquetado: , ,

Sonar PDF Reporter, tu código tiene algo más que decir

3 Febrero 2009 · 5 comentarios

La empresa en la que trabajo (GMV) está apostando con fuerza por el Software Libre, fruto de esta apuesta es la contribución a varios proyectos Open Source, entre ellos Sonar. Cuando se me dió esta oportunidad, no tuve dudas, quería aportar algo a este magnífico proyecto, del cual llevábamos sacando partido bastante tiempo.

Desde hace algún tiempo trabajo (entre otras cosas) para desarrollar un nuevo módulo en Sonar, Sonar PDF Reporter. El objetivo del módulo es añadir una nueva funcionalidad a Sonar que permita la explotación en forma de entregable de gran parte de la información que nos ofrece esta herramienta en su interfaz web.

El módulo genera un archivo PDF que contiene:

  • Visión general de la calidad del código de todo el proyecto.
  • Información concreta por módulos funcionales: métricas y medidas obtenidas a partir combinaciones de las métricas.
  • Información general del proyecto: versionado, estructura de módulos, descripción, etc

Además de ser un módulo integrado en Sonar, durante el diseño siempre tuve en mente el posible uso del módulo de forma independiente, es decir, ofrecer la posibilidad de explotar la información que Sonar proporciona desde nuestra propia aplicación, por ello se ha hecho uso de Web Services API de Sonar.

sonar

Sonar PDF Reporter Design

Quedan bastantes retoques y mejoras por realizar, pero puedes descargar un PDF de ejemplo con los reportes del propio proyecto Sonar, y ver en primicia el resultado ;)

→ 5 comentariosCategorías: Herramientas · Open Source · Software Quality
Etiquetado: , , , ,

Encuentro tecnológico: Medidas y calidad del software

16 Enero 2009 · Dejar un comentario

Ayer estuve en el encuentro tecnológico “Medidas y calidad del software”.

Las charlas fueron bastante interesantes. Destaco dos:

“Situación de la calidad del software en España: Estudios e Indicadores”

En esta charla Ignacio Caño (Inteco) Luna nos mostraba el último estudio realizado desde Inteco: un sondeo basado en encuestas a PYMES y grandes empresas. De él se desprendía el bajo conocimiento de las normas en cuanto a calidad, y proponía el conocimiento a través de certificaciones (en otras charlas se dijo exactamente lo contrario, en fin, son puntos de vista, veremos que depara el futuro), en cualquier caso el estudio realizado era bastante interesante.

“Métricas de la calidad del software”

Esmeralda Mancheño (Matchmind) nos presentó a uno de sus clientes, ISBAN. La responsable de calidad de ISBAN nos hizo partícipes del criticismo de la calidad en los productos orientados a la banca, donde los errores son tan caros que no pueden permitirse. Proponía la medición de todo tipo de parámetros como una forma de mejorar el producto tomando decisiones en función del resultado de estas mediciones. Me sorprendió una frase: “En ISBAN no tenemos presupuesto para la gestión de la calidad, el director dice que está todo pagado”. Supongo que un fallo en algún sistema informático del banco puede hacerles perder más dinero del que hayan invertido en 10 años en calidad…

→ Deja un ComentarioCategorías: Software Quality
Etiquetado: ,

Javascript como un módulo Maven

16 Enero 2009 · Dejar un comentario

¿Es posible aislar todo el código javascript de nuestra aplicación web en un proyecto a parte?

Si, lo es. Con javascript-maven-tools, en concreto con javascript-maven-plugin. Este plugin nos permite tratar con proyectos de tipo javascript, es decir, esto sería válido:

...
<dependencies>
    ...
    <dependency>
        <gruopId>example.javascript</groupId>
        <artifactId>my-javascript</artifactId>
        <version>1.0.0</version>
        <type>javascript</type>
    </dependency>
    ...
</dependencies>
...

Este plugin habilita el uso del tipo “javascript” en nuestras dependencias. Sólo debemos configurarlo:

<build>
    <plugin>
        <groupId>org.codehaus.mojo.javascript</groupId>
        <artifactId>javascript-maven-plugin</artifactId>
        <version>1.0-alpha-1-SNAPSHOT</version>
        <extensions>true</extensions>
        <executions>
            <execution>
                <id>js-copy-deps</id>
                <goals>
                    <goal>war-package</goal>
                </goals>
                <phase>package</phase>
            </execution>
        </executions>
    </plugin>
</build>

¿Y el artefacto javascript, cómo se crea?

Pues definiendo un proyecto maven de tipo “javascript”. Es decir, el “packaging” será de tipo “javascript” en el POM:

<packaging>javascript</packaging>

Y definiremos la siguiente extensión:

...
<build>
    <extensions>
        <extension>
            <groupId>org.codehaus.mojo.javascript</groupId>
            <artifactId>javascript-maven-plugin</artifactId>
            <version>1.0-alpha-1-SNAPSHOT</version>
         </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo.javascript</groupId>
            <artifactId>javascript-maven-plugin</artifactId>
            <version>1.0-alpha-1-SNAPSHOT</version>
            <extensions>true</extensions>
         </plugin>
     </plugins>
</build>
...

Maven tratará nuestro proyecto como un projecto más, y tenemos a nuestra disposición toda la potencia de la gestión de dependencias de Maven.

Para configurar el comportamiento del plugin debemos indicarle un proporcionar un par de parámetros, basta con incluir las propiedades en el POM:

<properties>
    <scripts>public/scripts</scripts>
    <lib></lib>
    <useArtifactId>true</useArtifactId>
</properties>

Eso es todo. Solo un detalle más, el plugin tiene algunos bugs, he reportado un parche a sus desarrolladores, aún no lo han incluido en la versión actual. Siempre podemos descargar el código y parchearlo nosotros mismos ;)

→ Deja un ComentarioCategorías: Herramientas · Maven Plugins
Etiquetado: ,