He configurado mi archivo pom para pedirle a Maven que compile mi código fuente para que sea compatible con la versión 1.5 utilizando los parámetros de configuración source
y target
. Aquí está mi pom:Establecer el -source y -target del compilador de Java con Maven - no funciona
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Y tengo una sencilla clase principal como esto:
package com.user;
public class Test
{
public static void main(String[] argv)
{
System.out.println("".isEmpty());
}
}
String#isEmpty()
se introdujo desde Java 1.6. Sin embargo, la compilación de mi código con mvn compile
funciona, mientras que esperaba que fallara porque he configurado Maven para compilar mi código para Java 1.5 y String#isEmpty
se introdujo en Java 1.6. ¿Alguien podría sugerir lo que podría haber hecho mal? ¿Cuál es la forma correcta de forzar a Maven a usar una versión de Java particular al compilar?
Para información, estoy usando Apache Maven 2.2.1 y javac 1.6.0_19.
Gracias.
Esa es una gran solución, pero desafortunadamente no maneja algunas otras incompatibilidades API, como la implementación parcial de la interfaz. Si no implementa el método remove() de Iterator, compilará bajo java 8 debido a la palabra clave 'default' en la interfaz, pero no compilará bajo java 7. Y este plugin sniffer no captará eso porque no es solo un método llamada. – Innokenty
Aquí hay una guía oficial sobre cómo usar Animal Sniffer y por qué: https://maven.apache.org/guides/mini/guide-building-jdk14-on-jdk15.html – Innokenty