standard oxygen luna kepler descargar java eclipse maven-2 m2eclipse build-error

oxygen - ¿Qué hace que el proyecto Maven importado en Eclipse use Java 1.5 en lugar de Java 1.6 de forma predeterminada y cómo puedo asegurarme de que no?



eclipse oxygen download (10)

Importé un proyecto de Maven y usé Java 1.5 aunque tengo 1.6 configurado como mi Preferences->Java->Installed JREs Eclipse por Preferences->Java->Installed JREs .

Cuando cambié el proyecto de Maven para usar el JRE 1.6, aún faltaban los errores de compilación de cuando el proyecto estaba usando Java 1.5 (describí estos errores de compilación anteriormente: he compilado errores con m2eclipse pero no con maven2 en la línea de comandos - es mi m2eclipse mal configurado? )

Voy a eliminar el proyecto e intentarlo de nuevo, pero quiero asegurarme esta vez de que utiliza Java 1.6 desde el principio para ver si esto elimina los problemas de compilación.

¿Cómo me aseguro de que el proyecto use Java 1.6 cuando lo importe?


Ajustes específicos del proyecto

Un lugar más donde esto puede salir mal es en la configuración específica del proyecto, en Eclipse.

  1. Propiedades del proyecto: haga clic en su proyecto y uno de los siguientes:

    • Alt + Enter
    • Menú> Proyecto> Propiedades
    • haga clic derecho en su proyecto> propiedades del proyecto (último elemento en el menú)
  2. haga clic en "Java Compiler"

  3. Desmarque "Habilitar configuraciones específicas del proyecto" (o cámbielas todas a mano).

Debido a los requisitos de los clientes, los tuvimos habilitados para mantener nuestros proyectos en 1.6. Cuando fue necesario actualizar a 1.7, tuvimos dificultades porque necesitábamos cambiar la versión de Java por todas partes:

  • proyecto POM
  • Eclipse Workspace por defecto
  • ajustes específicos del proyecto
  • Ejecutando máquina virtual (1.6 fue usado para todo)

Agregué esto a mi pom.xml debajo de la descripción del proyecto y funcionó:

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


Aquí está la causa raíz de java 1.5:

También tenga en cuenta que en la actualidad la configuración de origen predeterminada es 1.5 y la configuración de destino predeterminada es 1.5, independientemente del JDK con el que se ejecuta Maven. Si desea cambiar estos valores predeterminados, debe establecer el origen y el destino.

Referencia: Apache Mavem Compiler Plugin

Los siguientes son los detalles:

Pom.xml simple

<?xml version="1.0" encoding="UTF-8"?> <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.pluralsight</groupId> <artifactId>spring_sample</artifactId> <version>1.0-SNAPSHOT</version> </project>

El siguiente complemento está tomado de una versión expandida de POM (Effective POM),

Esto se puede obtener con este comando desde la línea de comandos C:/mvn help:effective-pom Acabo de poner aquí un pequeño fragmento de código en lugar de un pom completo.

<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>default-testCompile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin>

Incluso aquí no ves dónde está definida la versión de Java, vamos a cavar más ...

Descargue el plugin, Apache Maven Compiler Plugin »3.1 como disponible en jar y ábralo en cualquier herramienta de compresión de archivos como 7-zip

Recorrer el frasco y la aleta.

plugin.xml

archivo dentro de la carpeta

maven-compiler-plugin-3.1.jar / META-INF / maven /

Ahora verá la siguiente sección en el archivo,

<configuration> <basedir implementation="java.io.File" default-value="${basedir}"/> <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/> <classpathElements implementation="java.util.List" default-value="${project.testClasspathElements}"/> <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/> <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId> <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy> <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion> <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug> <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel> <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding> <executable implementation="java.lang.String">${maven.compiler.executable}</executable> <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError> <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse> <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork> <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/> <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem> <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial> <mojoExecution implementation="org.apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution> <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize> <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/> <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation> <showWarnings implementation="boolean" default-value="false">${maven.compiler.showWarnings}</showWarnings> <skip implementation="boolean">${maven.test.skip}</skip> <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning> <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source> <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis> <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target> <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource> <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget> <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation> <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose> <mavenSession implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/> <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/> </configuration>

Mira el código de arriba y descubre las siguientes 2 líneas

<source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source> <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>

Buena suerte.


Descubrí que mi problema era que alguien cometió el archivo .project y .classpath que tenían referencias a Java1.5 como el JRE predeterminado.

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"> <attributes> <attribute name="owner.project.facets" value="java"/> </attributes> </classpathentry>

Al cerrar el proyecto, eliminar los archivos y luego volver a importar como un proyecto de Maven, pude configurar correctamente el proyecto para que utilice JRE del área de trabajo o el jdk relevante sin que vuelva a 1.5. Por lo tanto, evite registrar en su SVN los archivos .project y .classpath

Espero que esto ayude a los demás.


El complemento m2eclipse no utiliza los valores predeterminados de Eclipse, el complemento m2eclipse deriva la configuración del POM. Entonces, si desea que un proyecto de Maven se configure para usar la configuración de Java 1.6 cuando se importe bajo Eclipse, configure el maven-compiler-plugin como corresponda, como ya sugerí:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin>

Si su proyecto ya está importado, actualice la configuración del proyecto ( haga clic con el botón derecho en el proyecto y luego en Maven V Update Project Configuration ).



Su JRE probablemente se definió en la configuración de ejecución. Siga estos pasos en Eclipse para cambiar el JRE de compilación.

1) Haga clic derecho en el proyecto y seleccione Ejecutar como > Ejecutar configuraciones

2) En la ventana Ejecutar configuraciones, seleccione la configuración de compilación del proyecto en el panel izquierdo. A la derecha, verá varias pestañas: Main, JRE, Refresh, Source, ...

3) Haga clic en la pestaña JRE, debería ver algo como esto

4) De forma predeterminada, se utilizará el JRE predeterminado de trabajo (el JRE que seleccione como predeterminado en Preferencias-> Java-> JRE instalados ). Si desea utilizar otro JRE instalado, marque la casilla de verificación Alternar JRE y seleccione su JRE preferido en el menú desplegable.


Una posible razón más si está utilizando Tycho y Maven para crear paquetes, tiene un entorno de ejecución incorrecto ( Bundle-RequiredExecutionEnvironment ) en el archivo de manifest.mf ( manifest.mf ) definido. Por ejemplo:

Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Engine Plug-in Bundle-SymbolicName: com.foo.bar Bundle-Version: 4.6.5.qualifier Bundle-Activator: com.foo.bar.Activator Bundle-Vendor: Foobar Technologies Ltd. Require-Bundle: org.eclipse.core.runtime, org.jdom;bundle-version="1.0.0", org.apache.commons.codec;bundle-version="1.3.0", bcprov-ext;bundle-version="1.47.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.5 Export-Package: ... ... Import-Package: ... ...

En mi caso todo lo demás estaba bien. Los complementos del compilador (maven y tycho normales también) se configuraron correctamente, todavía m2 generó un nivel de cumplimiento anterior debido al manifiesto. Pensé que compartía la experiencia.


La solución más simple en Springboot

Te daré el más simple si usas Springboot:

<properties> <java.version>1.8</java.version> </properties>

Luego, haga clic con el botón derecho en su proyecto de Eclipse: Maven> Actualizar proyecto> Actualizar la configuración del proyecto desde pom.xml

Eso debería hacer.


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