A logo showing the text blog.marcnuri.com
English
Inicio»Java»Cómo omitir tests en versiones específicas del JDK con Maven Compiler Plugin

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Cómo omitir tests en versiones específicas del JDK con Maven Compiler Plugin

2025-01-14 en Java etiquetado Java / Maven / Testing / Test-Driven Development (TDD) por Marc Nuri | Última actualización: 2025-01-14
English version

Introducción

La cadencia de lanzamiento más rápida de Java ha hecho cada vez más común que los proyectos apunten a múltiples versiones de JDK simultáneamente. Además, un número creciente de dependencias requieren versiones de JDK más recientes y ya no admiten versiones anteriores.

Cuando se trata de dependencias de test, es común tener tests que solo se pueden ejecutar en versiones específicas de JDK. Para garantizar una compilación y ejecución de tests exitosa, puede ser necesario compilar y ejecutar tests sólo en las versiones de JDK con las que son compatibles.

Es posible que te sientas tentado a usar la anotación @DisabledForJreRange de JUnit para omitir tests en versiones específicas de un JDK. Sin embargo, este enfoque solo omite la ejecución de los tests y no la compilación de las clases de test. Esto puede llevar a errores de compilación, especialmente cuando las clases de test dependen de APIs que no están disponibles en el JDK actual.

En esta publicación, te mostraré cómo configurar el Maven Compiler Plugin y tu proyecto Maven para compilar y ejecutar tests solo en versiones específicas de un JDK.

Configurando el Maven Compiler Plugin

El Maven Compiler Plugin permite un control detallado sobre el proceso de compilación, incluida la exclusión de archivos o directorios específicos.

Para omitir la compilación de clases de test en versiones específicas de JDK, puedes usar la opción de configuración testExcludes.

Por ejemplo, la siguiente configuración excluirá todas las clases de test que tengan el sufijo LegacyTest del proceso de compilación de tests:

pom.xml
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <testExcludes>
          <!-- Exclude test files with the suffix 'LegacyTest' -->
          <testExclude>**/*LegacyTest.java</testExclude>
        </testExcludes>
      </configuration>
    </plugin>
  </plugins>
</build>

Excluyendo tests en versiones específicas de JDK

Podemos aprovechar los perfiles de Maven para realizar las exclusiones solo cuando ejecutamos Maven en versiones específicas de un JDK. Mediante el uso del elemento activation en combinación con la propiedad jdk, podemos activar un perfil sólo cuando Maven se está ejecutando en una versión específica de un JDK.

Por ejemplo, la siguiente configuración excluirá todas las clases de test que tengan el sufijo LegacyTest cuando Maven se esté ejecutando en Java 8:

pom.xml
<profiles>
  <profile>
    <id>exclude-legacy-tests</id>
    <activation>
      <jdk>1.8</jdk>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <testExcludes>
              <testExclude>**/*LegacyTest.java</testExclude>
            </testExcludes>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

En el futuro, si necesitas excluir clases de test en JDK 11 o anteriores, puedes ajustar la propiedad jdk a <jdk>(,11]</jdk>.

Puedes ver un caso de uso real de esta configuración en el proyecto Eclipse JKube en el pom.xml.

Conclusión

En esta publicación, hemos visto cómo configurar el Maven Compiler Plugin para excluir clases de test del proceso de compilación en función de la versión del JDK. Combinando perfiles de Maven con la propiedad jdk, puedes excluir dinámicamente clases de test incompatibles, asegurando flujos de trabajo de compilación y testeo sin problemas.

Este patrón de configuración es flexible y se puede adaptar a varios escenarios, convirtiendo Maven en una herramienta poderosa para mantener la compatibilidad en diversos entornos.

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Eclipse JKube 1.18 está disponible!Docker: Cómo inicializar docker-credential-pass
© 2007 - 2025 Marc Nuri