Compilación de ficheros LESS en Maven

A la hora de desarrollar una aplicación web, una práctica muy extendida es trabajar con LESS en vez de directamente con CSS.

1. Introducción

A la hora de desarrollar una aplicación web, una práctica muy extendida es trabajar con LESS en vez de directamente con CSS. LESS es un lenguaje que extiende CSS dotándolo de comportamientos dinámicos como el uso de variables, operaciones o funciones. Pero si estamos trabajando en Maven, tener que compilar los ficheros .less a parte no es lo más práctico del mundo y muy propenso a errores humanos, sobre todo si estamos hablando de un proceso de despliegue continuo. Por suerte tenemos un plugin de Maven (https://github.com/marceloverdijk/lesscss-maven-plugin) que nos permite compilar los ficheros .less junto con el resto de nuestra aplicación. En la documentación del proyecto en GitHub tenemos las opciones de configuración disponibles (en inglés), aquí vamos a ver las opciones más comunes.

2. Entorno

El tutorial está escrito en el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15’’ (2.3 GHz Intel i7, 8GB 1333 Mhz DDR3, 500GB Solid State SATA Storage)

  • Sistema Operativo: Mac OS X Yosemite 10.10.3

  • Java Virtual Machine (JVM) 8

  • Maven 3.3.3

3. Configuración de Maven

Para compilar nuestros ficheros LESS en Maven, hemos de añadir el plugin al pom.xml:

pom.xml

Text
<span class="tag">&lt;properties&gt;</span>
    <span class="tag">&lt;lesscss-maven-plugin.version&gt;</span>1.7.0.1.1<span class="tag">&lt;/lesscss-maven-plugin.version&gt;</span>
    ...
<span class="tag">&lt;/properties&gt;</span>

<span class="tag">&lt;build&gt;</span>
    ...
    <span class="tag">&lt;plugins&gt;</span>
        ...
        <span class="tag">&lt;plugin&gt;</span>
            <span class="tag">&lt;groupId&gt;</span>org.lesscss<span class="tag">&lt;/groupId&gt;</span>
            <span class="tag">&lt;artifactId&gt;</span>lesscss-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
            <span class="tag">&lt;version&gt;</span>${lesscss-maven-plugin.version}<span class="tag">&lt;/version&gt;</span>
            <span class="tag">&lt;executions&gt;</span>
                <span class="tag">&lt;execution&gt;</span>
                <span class="tag">&lt;goals&gt;</span>
                    <span class="tag">&lt;goal&gt;</span>compile<span class="tag">&lt;/goal&gt;</span>
                <span class="tag">&lt;/goals&gt;</span>
                <span class="tag">&lt;/execution&gt;</span>
            <span class="tag">&lt;/executions&gt;</span>
        <span class="tag">&lt;/plugin&gt;</span>
        ...
    <span class="tag">&lt;/plugins&gt;</span>
    ...
<span class="tag">&lt;/build&gt;</span>

Si queremos modificar la configuración por defecto del plugin, podemos hacerlo mediante las opciones de configuración (la documentación del plugin recoge todas las opciones). Un ejemplo sería:

pom.xml

Text
<span class="tag">&lt;plugin&gt;</span>
    <span class="tag">&lt;groupId&gt;</span>org.lesscss<span class="tag">&lt;/groupId&gt;</span>
    <span class="tag">&lt;artifactId&gt;</span>lesscss-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
    <span class="tag">&lt;version&gt;</span>${lesscss-maven-plugin.version}<span class="tag">&lt;/version&gt;</span>
    <span class="tag">&lt;configuration&gt;</span>
        <span class="tag">&lt;sourceDirectory&gt;</span>${project.basedir}/src/main/resources/less<span class="tag">&lt;/sourceDirectory&gt;</span>
        <span class="tag">&lt;outputDirectory&gt;</span>${project.basedir}/target/css<span class="tag">&lt;/outputDirectory&gt;</span>
        <span class="tag">&lt;compress&gt;</span>true<span class="tag">&lt;/compress&gt;</span>
        <span class="tag">&lt;force&gt;</span>true<span class="tag">&lt;/force&gt;</span>
        <span class="tag">&lt;includes&gt;</span>
            <span class="tag">&lt;include&gt;</span>fan.less<span class="tag">&lt;/include&gt;</span>
        <span class="tag">&lt;/includes&gt;</span>
    <span class="tag">&lt;/configuration&gt;</span>
    <span class="tag">&lt;executions&gt;</span>
        <span class="tag">&lt;execution&gt;</span>
        <span class="tag">&lt;goals&gt;</span>
            <span class="tag">&lt;goal&gt;</span>compile<span class="tag">&lt;/goal&gt;</span>
        <span class="tag">&lt;/goals&gt;</span>
        <span class="tag">&lt;/execution&gt;</span>
    <span class="tag">&lt;/executions&gt;</span>
<span class="tag">&lt;/plugin&gt;</span>

La opción sourceDirectory nos permite indicar el directorio donde se encuentran los ficheros .less, y con outputDirectory indicamos dónde dejar los .css resultantes.

Si queremos minimizar el CSS obtenido (esto es, sin saltos de línea ni espacios innecesarios), lo conseguimos marcando la opción compress a true (por defecto es false).

Por defecto, el plugin sólo compila los .less si detecta que ha habido algún cambio en ellos. Para forzar la compilación independientemente de si han cambiado o no, sólo hay que añadir la opción force a true.

Por último, dentro de includes podemos añadir todos los ficheros .less que queremos compilar, añadiendo una línea de include para cada uno. IMPORTANTE: el plugin crea un fichero CSS por cada fichero LESS. Así que si queremos obtener un único .css lo mejor es tener un .less que importe todos los demás e incluir únicamente este .less “padre” en la configuración del plugin.

4. Conclusiones

El plugin de Maven para LESS nos permite compilar los distintos ficheros .less para generar el CSS final y permite cierto grado de configuración como la elección de los directorios fuente y origen, la opción de minimizar el CSS, etc. Sin embargo, el plugin nos creará un fichero .css por cada .less que tengamos sin tener ninguna opción (en el momento de escribir este tutorial) para generar un sólo .css. Pero esto lo podemos conseguir con un fichero .less principal que incluya imports al resto de ficheros e incluyendo únicamente ese fichero principal a la lista de compilación.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

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

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultora tecnológica de desarrollo de proyectos informáticos.
Doctora en Inteligencia Artificial.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4