icono_twiter
Alejandro Pérez García

Alejandro es socio fundador de Autentia y nuestro experto en J2EE, Linux y optimización de aplicaciones empresariales.

Ingeniero en Informática y Certified ScrumMaster

Si te gusta lo que ves, puedes contratarle para darte ayuda con soporte experto, impartir cursos presenciales en tu empresa o para que realicemos tus proyectos como factoría (Madrid).
Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación.

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2008-10-17

Tutorial visitado 5.270 veces Descargar en PDF
maven-license-plugin Como gestionar la licencia de nuestros ficheros fuentes

maven-license-plugin
Como gestionar la licencia de nuestros ficheros fuentes

Creación: 17-10-2008



índice de contenidos

1. Introducción
2. Entorno
3. El fichero con la cabecera de la licencia
4. Configuración del proyecto
5. Comprobando si tenemos correctamente la licencia en la cabecera de los ficheros fuentes
6. Actualizando la cabecera de licencia en todos los ficheros fuente
7. Como se excluyen ficheros para que no se tengan en cuenta ni al comprobar ni al actualizar
8. Como poner la cabecera de la licencia en ficheros no reconocidos por el plugin
9. La configuración completa después de todos los cambios
10. Conclusiones
11. Sobre el autor


1. Introducción

Cuando construimos aplicaciones, lo normal es que estas estén bajo alguna tipo de licencia, ya sea esta free softwafre (GPL, LGPL, ...), open source (MPL, Apache, ...) o una licencia comercial propietaria.

El caso es que lo habitual es poner en la cabecera de todos nuestros ficheros fuentes (.java, .xml, .jsp, .properties, ...) un texto indicando la propiedad (el copyrigth) y la licencia que "protege" ese código fuente.

Esto no es tarea fácil teniendo en cuenta que este texto debe ser un comentario y cada fichero fuente tiene su propio tipo de comentario, y sobre todo teniendo en cuenta, no el hecho de añadir el mensaje, sino su mantenimiento, comprobación y actualización.

Para solucionar todos estos problemas y simplificarlos casi hasta el absurdo viene a rescatarnos maven-license-plugin (http://code.google.com/p/maven-license-plugin/).

maven-license-plugin es un plugin de Maven (como su propio nombre indica ;) que se puede enganchar al ciclo de vida de Maven, normalmente a la fase verify, para comprobar y/o actualizar el texto de la licencia en todos nuestros ficheros fuente (con independencia del tipo de estos ficheros).

En este tutorial vamos a ver como configurar y usar este plugin (este tutorial está basado en la estupenda documentación que proporciona su creador mathieu.carbou en la home del plugin).



2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Asus G1 (Core 2 Duo a 2.1 GHz, 2048 MB RAM, 120 GB HD).

  • Nvidia GEFORCE GO 7700

  • Sistema Operativo: GNU / Linux, Debian (unstable), Kernel 2.6.26, KDE 3.5

  • Java Sun 1.6.0_07

  • Maven 2.0.9

  • maven-license-plugin 1.3.2



3. El fichero con la cabecera de la licencia

El texto que se pondrá como cabecera en todos los ficheros fuentes, debe ser un fichero de texto plano sin ninguna marca de comentario en especial.

Lo podríamos guardar, por ejemplo, en src/main/config/copyrightNotice.txt

Aquí os pongo un ejemplo, suponiendo que usamos la licencia LGPL en nuestra aplicación:

Copyright (C) 2008 Autentia Real Business Solutions S.L.

This file is part of Autentia Framework.

Autentia Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, version 3 of the License.

Autentia Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Autentia Framework. If not, see <http://www.gnu.org/licenses/>.

Lo interesante de este fichero es que donde hemos puesto: "Copyright (C) 2008 Autentia Real Business Solutions S.L.", podríamos haber usado: "Copyright (C) ${year} ${author} <${email}>", y el propio plugin se encargará de sustituir las variables con los valores que nosotros le demos.



4. Configuración del proyecto

Usar este plugin es muy sencillo, basta con añadir a nuestro pom.xml las siguientes líneas:

...
<pluginRepositories>
    ...
    <pluginRepository>
        <id>mc-release</id>
        <name>Local Maven repository of releases</name>
        <url>http://mc-repo.googlecode.com/svn/maven2/releases</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
    ...
</pluginRepositories>
...

De esta forma el plugin se descargará automáticamente.

También podemos no dar de alta este repositorio, y el plugin se descargará de los repositorios oficiales de Maven. Pero como su propio creador nos indica, desde que sale una versión hasta que se actualiza en los repositorios oficiales de Maven pasa un cierto tiempo, así que si queremos estar siempre a la última es mejor declarar el repositorio (por ejemplo, a la hora de escribir estas líneas en el repositorio oficial se encuentra la versión 1.3.1, mientras que si damos de alta el repositorio de su creador tendremos acceso a la versión 1.3.2).



5. Comprobando si tenemos correctamente la licencia en la cabecera de los ficheros fuentes

En el pom.xml añadiremos las siguientes líneas:

...
<plugins>
    ...
    <plugin>
        <groupId>com.google.code.maven-license-plugin</groupId>
        <artifactId>maven-license-plugin</artifactId>
        <configuration>
            <header>src/main/config/copyrightNotice.txt</header>
        </configuration>
    </plugin>
    ...
</plugins>
...

Ahora lo lanzaremos desde línea de comandos con:

$ mvn license:check

Si estamos usando variables en la plantilla de la nota de licencia, podemos ejecutarlo con:

$ mvn license:check -Dyear=2008 -Dauthor=Autentia -Demail=proyecto@autentia.com

Si lo que queremos es que la comprobación se haga siempre en la fase verify (cosa muy recomendable), pondríamos las siguientes líneas en nuestro pom.xml:

...
<plugins>
    ...
    <plugin>
        <groupId>com.google.code.maven-license-plugin</groupId>
        <artifactId>maven-license-plugin</artifactId>
        <configuration>
            <header>src/main/config/copyrightNotice.txt</header>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    ...
</plugins>
...

Para realizar la verificación explícitamente, ejecutaríamos el comando:

$ mvn verify

y, teniendo en cuenta que ahora está "enganchado" al ciclo de vida de Maven, también se realizara la comprobación si ejecutamos:

$ mvn install
$ mvn deploty
...



6. Actualizando la cabecera de licencia en todos los ficheros fuente

Para actualizar la cabecera de licencia en todos los ficheros fuentes, basta con ejecutar:

$ mvn license:format

Se han hecho varias pruebas, y "actualizar" significa:

  • Si el fichero no tiene licencia, se lo añade.

  • Si la plantilla de la licencia (la que creamos en el punto 3) ha cambiado, se actualiza el texto de la licencia de cada fichero fuente. Es decir, no se vuelve a añadir la licencia, sino que se modifica el texto actual del fichero fuente.

  • Si se ha modificado el texto de la licencia en algún fichero fuente, se actualiza el fichero fuente, restaurando el texto del fichero fuente para que coincida con la plantilla (la que definimos en el punto 3).



7. Como se excluyen ficheros para que no se tengan en cuenta ni al comprobar ni al actualizar

Por defecto ya hay un conjunto de ficheros y directorios que son excluidos (visitar "Default exludes" en http://code.google.com/p/maven-license-plugin/wiki/Configuration para ver la lista completa). Pero también podemos excluir todos los ficheros que queramos. Por ejemplo, en la configuración que ya tenemos en nuestro pom.xml, añadiremos:

        ...
        <configuration>
            ...
            <excludes>
                <exclude>**/LICENSE.txt</exclude>
                <exclude>**/COPYING.LESSER</exclude>
                <exclude>**/COPYING</exclude>
            </excludes>
            ...
        </configuration>
        ...

Como se puede ver, estamos excluyendo los ficheros LICENSE.txt, COPYNG.LESSER y COPYING, con independencia del directorio en el que se encuentren (**/). Es decir, se admiten expresiones regulares, así que el sistema es bastante potente.



8. Como poner la cabecera de la licencia en ficheros no reconocidos por el plugin

El plugin reconoce una lista de extensiones bastante amplia (ver lista completa en "Supported file extensions" en http://code.google.com/p/maven-license-plugin/), pero no soporta todas las extensiones posibles. Aún así añadir nuevas extensiones es muy sencillo, por ejemplo, a nuestra configuración añadiremos las siguientes líneas:

        ...
        <configuration>
            ...
            <mapping>
                <jspx>xml</jspx>
            </mapping>
            ...
        </configuration>
        ...

Con esto lo que le estamos diciendo es que los ficheros con extensión jspx (el nombre de la etiqueta) se interpreten como si fueran xml (el contenido de la etiqueta).



9. La configuración completa después de todos los cambios

Aquí os dejo la configuración final despues de ir aplicando los diferentes cambios que hemos ido viendo:

...
<plugins>
    ...
    <plugin>
        <groupId>com.google.code.maven-license-plugin</groupId>
        <artifactId>maven-license-plugin</artifactId>
        <configuration>
            <header>src/main/config/copyrightNotice.txt</header>
            <excludes>
                <exclude>**/LICENSE.txt</exclude>
                <exclude>**/COPYING.LESSER</exclude>
                <exclude>**/COPYING</exclude>
            </excludes>
            <mapping>
                <jspx>xml</jspx>
            </mapping>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    ...
</plugins>
...



10. Conclusiones

Como podéis ver, a día de hoy prácticamente todo ya está hecho, así que siempre merece la pena buscar un buen rato en Internet, porque o encontramos nuestro problema resuelto o veremos tantas cosas que ya tendremos una buena idea de como resolver nuestro problema.



11. Sobre el autor

Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software)

Socio fundador de Autentia (Formación, Consultoría, Desarrollo de sistemas transaccionales)

mailto:alejandropg@autentia.com

Autentia Real Business Solutions S.L. - "Soporte a Desarrollo"

http://www.autentia.com



A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2009-04-29-04:13:34

Autor:

[José Miguel Vega] Hola muy buen tutorial, y que comando aplico para los plugins en entorno de windows xp, me arroja problemas con las dependencias. Saludos JM