java maven pom.xml

¿Cómo se especifica la versión del compilador de Java en un archivo pom.xml?



maven (4)

Escribí un código de Maven en NetBeans que tiene aproximadamente más de 2000 líneas. Cuando lo compilo en netbeans, todo está bien, pero si quiero ejecutarlo en la línea de comandos, obtendré estos errores:

generics are not supported in -source 1.3 (use -source 5 or higher to enable generics) ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); generics are not supported in -source 1.3 (use -source 5 or higher to enable generics) HashSet<Double> resid_List = new HashSet<Double>(Arrays.asList(resid_val)); generics are not supported in -source 1.3 (use -source 5 or higher to enable generics) List<Integer> ind_ovlpList = new ArrayList<Integer>(Arrays.asList(ind_ovlp)); generics are not supported in -source 1.3 (use -source 5 or higher to enable generics) public class ColumnComparator implements Comparator<double[]> { annotations are not supported in -source 1.3 (use -source 5 or higher to enable annotations) @Override

Intenté usar Java 1.3.1, errores del compilador , pero obtuve más errores. Encontré en otras publicaciones que debería modificar pom.xml, pero no sé cómo. Aquí está mi pom.xml

<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.mycompany</groupId> <artifactId>mavenmain</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>mavenmain</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>gov.nist.math</groupId> <artifactId>jama</artifactId> <version>1.0.2</version> </dependency> </dependencies> </project>

Sería genial si me pudieras ayudar.


En general, no desea valorar solo la versión de source ( javac -source 1.8 por ejemplo), sino que desea valorar tanto la versión de source como la versión de target ( javac -source 1.8 -target 1.8 por ejemplo).
Tenga en cuenta que desde Java 9, tiene una forma de transmitir información y de una forma más robusta para la compatibilidad de compilación cruzada ( javac -release 9 ).
El comando Maven que envuelve el comando javac proporciona múltiples formas de transmitir todas estas opciones estándar de JVM.

¿Cómo especificar la versión JDK?

El uso de las propiedades maven-compiler-plugin o maven.compiler.source / maven.compiler.target para especificar el source y el target son equivalentes.

<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>

y

<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>

son equivalentes según la documentación de Maven del complemento del compilador, ya que los elementos <source> y <target> en la configuración del compilador usan las propiedades maven.compiler.source y maven.compiler.target si están definidas.

source

El argumento -source para el compilador de Java.
El valor predeterminado es: 1.6 .
La propiedad del usuario es: maven.compiler.source .

target

El argumento -target para el compilador de Java.
El valor predeterminado es: 1.6 .
La propiedad del usuario es: maven.compiler.target .

Acerca de los valores predeterminados para source y target , tenga en cuenta que desde la 3.8.0 del compilador de 3.8.0 , los valores predeterminados han cambiado de 1.5 a 1.6 .

Desde el compilador-plugin 3.6 de maven tienes una nueva forma de especificar la versión de Java

Puedes usar el argumento de release :

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>9</release> </configuration> </plugin>

También puede declarar solo la propiedad del usuario maven.compiler.release :

<properties> <maven.compiler.release>9</maven.compiler.release> </properties>

Pero en este momento, la última no será suficiente, ya que la versión predeterminada de maven-compiler-plugin que utiliza no se basa en una versión lo suficientemente reciente.

El argumento de release Maven transmite el release : una nueva opción estándar de JVM que podríamos pasar desde Java 9:

Compila contra la API pública, soportada y documentada para una versión de máquina virtual específica.

De esta manera, se proporciona una forma estándar de especificar la misma versión para las opciones de JVM de source , target y bootstrap .
Tenga en cuenta que especificar el bootstrap es una buena práctica para realizar compilaciones cruzadas y no se verá afectado si tampoco realiza compilaciones cruzadas.

¿Cuál es la mejor manera de especificar la versión JDK?

Para Java 8 y más abajo:

Ni las propiedades de maven.compiler.source / maven.compiler.target ni el uso de maven-compiler-plugin es mejor. No cambia nada en los hechos, ya que finalmente las dos formas se basan en las mismas propiedades y el mismo mecanismo: el complemento del compilador del núcleo de Maven.

Bueno, si no necesita especificar otras propiedades o comportamientos que las versiones de Java en el complemento del compilador, el uso de esta manera tiene más sentido ya que es más conciso:

<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>

Desde Java 9:

El argumento de release (tercer punto) es una forma de considerar seriamente si desea utilizar la misma versión para el source y el target .


Me enfrenté con el mismo problema en el proyecto eclipse neon simple maven java

Pero agrego los detalles a continuación dentro del archivo pom.xml

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>

Después de hacer clic con el botón derecho en proyecto> maven> actualizar proyecto (actualización de fuerza marcada)

Me resolvió mostrar error en proyecto

Espero que sea de ayuda

Thansk


maven-compiler-plugin ya está presente en la dependencia de la jerarquía de complementos en pom.xml. Compruebe en efectivo POM.

Para abreviar puedes usar propiedades como esta:

<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>

Estoy usando maven 3.2.5


<project> [...] <build> [...] <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>(whatever version is current)</version> <configuration> <!-- or whatever version you use --> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> [...] </build> [...] </project>

Vea la página de configuración para el complemento del compilador de Maven:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

Ah, y: no use Java 1.3.x, las versiones actuales son Java 1.7.xo 1.8.x