maven-license-plugin: cómo gestionar la licencia de nuestros ficheros fuentes

0
9772

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.txtCOPYNG.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 después 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

 

Alejandro es socio fundador de Autentia y nuestro experto en Java EE, Linux y optimización de aplicaciones empresariales. Ingeniero en Informática y Certified ScrumMaster. Seguir @alejandropgarci 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.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad