2010-08-21 6 views
188

me importan un proyecto Maven y se utiliza Java 1.5 a pesar de que he 1,6 configurado como mi defecto Eclipse Preferences->Java->Installed JREs.¿Qué causa que el proyecto de Maven importado en Eclipse utilice Java 1.5 en lugar de Java 1.6 de manera predeterminada y cómo puedo asegurarme de que no lo haga?

Cuando cambié el proyecto Maven para utilizar el JRE 1.6 todavía tenía los errores de generación quedaron de cuando el proyecto estaba usando Java 1.5 (I descrito estos errores se acumulan anteriormente en: I have build errors with m2eclipse but not with maven2 on the command line - is my m2eclipse misconfigured?)

voy para eliminar el proyecto y volver a intentarlo, pero quiero asegurarme de que esta vez utilice Java 1.6 desde el principio para ver si esto elimina los problemas de compilación.

¿Cómo me aseguro de que el proyecto utiliza Java 1.6 al importar eso?

+4

m2eclipse ignora lo que configura para el valor predeterminado de Eclipse. Siempre usará 1.5 por defecto. Sin embargo, en su caso, el proyecto utiliza el plugin maven-compiler y establece la versión explícitamente en 1.5. Tendrá que cambiar eso en el pom y actualizar la configuración del proyecto para cambiar la versión. Sin embargo, ya probé esto y no funcionó para mí. Estoy bastante seguro de que ese no es el problema a pesar de lo que otros dijeron en su otra pregunta. –

+1

No, m2eclipse no siempre será el predeterminado a 1.5, de manera predeterminada será la configuración del compilador maven-compiler. –

+1

¿Cómo cambias la configuración del plugin maven-compiler? – Lokathor

Respuesta

221

plug-in El m2eclipse no utiliza los valores predeterminados de Eclipse, el plugin m2eclipse deriva la configuración del POM. Así que si quieres un proyecto Maven para ser configurado para utilizar Java 1.6 ajustes cuando sean importados en Eclipse, configurar el maven-compiler-plugin apropiadamente, 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 ha sido importada, actualizar la configuración del proyecto (haga clic con el botón derecho en en el proyecto y luego Configuración del proyecto de actualización de Maven V).

+0

Exactamente.Sin embargo, no solucionará los errores de compilación. –

+1

Por favor, no grites. Eso es grosero. Funcionó después de eliminar y volver a importar el proyecto. Pero no de otra manera. –

+6

@Raoul Funciona sin volver a importar el proyecto si ** Update Project Configuration ** como lo escribí. Lo probé 3 veces y simplemente funciona en mi máquina. –

22

que quería añadir algo a la respuesta ya proporcionado. maven-compiler-plugin por defecto compilará su proyecto utilizando Java 1.5, que es donde m2e get es su información.

Es por eso que tiene que declarar explícitamente el maven-compiler-plugin en su proyecto con algo que no sea 1.5. Su efectiva pom.xml utilizarán implícitamente el valor predeterminado establecido en el maven-compiler-pluginpom.xml.

+6

para mí esto responde más claramente "¿por qué es 1.5 cuando hago un nuevo Maven? ¿proyecto?" – mmcrae

+1

Verificado con 'maven-compiler-plugin' 3.5.1: Vea las líneas 132 y 138 para los valores por defecto de Strings' source' y 'target': http://svn.apache.org/viewvc/maven/plugins/tags/ maven-compiler-plugin-3.5.1/src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java? view = markup Siéntase libre de agregarlo a su respuesta @Nicholas –

+1

@LIttleAncientForestKami verificado con 3.7.0, en este momento los valores se establecen como constantes 'DEFAULT_SOURCE' y' DEFAULT_TARGET', pero ambos se establecen en 1.5. – Kidburla

1

Una razón más posible si está utilizando Tycho y Maven para construir paquetes, que tiene mal entorno de ejecución (Bundle-RequiredExecutionEnvironment) en el archivo de manifiesto (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 (normal maven y tycho también) se configuraron correctamente, aún m2 generó un nivel de cumplimiento anterior debido al manifiesto. Pensé que comparto la experiencia.

25
<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> 
+8

Dentro de

5

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 sobre el proyecto y seleccione Ejecutar como > Ejecutar configuraciones

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

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

enter image description here

4) De manera predeterminada, el trabajo por defecto JRE (JRE que seleccione como predeterminada en Preferencias-> Java-> Instalado JREs) serán utilizados. Si desea utilizar otro JRE instalado, marque la casilla Alternate JRE y seleccione su JRE preferido del menú desplegable.

+0

Gracias por esta respuesta, mi configuración de ejecución se estaba ejecutando con el espacio de trabajo predeterminado, ¡así que esto realmente ayudó! –

+0

Esto ayudó, no puedo creer que hayamos pasado por alto esto! –

1

Descubrí que mi problema era que alguien había cometido el archivo .project y .classpath que tenía referencias a Java 1.5 como 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, la eliminación de los archivos, y luego volver a importar como un proyecto Maven, yo era capaz de establecer adecuadamente el proyecto de utilizar JRE o JDK espacio de trabajo relevante sin que volver de nuevo a 1,5. Por lo tanto, evite verificar en su SVN los archivos .project y .classpath

Espero que esto ayude a los demás.

20

he añadido esto a mi pom.xml por debajo de la descripción del proyecto y funcionó: los ajustes específicos

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

Esto es más simple que la respuesta aceptada y también fue bueno para mí. – Brick

+1

Esto funcionó para mí, sin embargo, la respuesta aceptada no funcionó. –

+0

¿Cuál es la diferencia entre esto y la configuración de maven-compiler-plugin (según la respuesta aceptada)? Ambas formas me funcionan. –

1

Proyecto

Uno de los lugares más donde esto puede ir mal está 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 el menú)
  2. haga clic en "Java Compiler"

  3. Desmarque "Habilitar configuración específica del proyecto" (o cámbielos todos a mano).

Debido a los requisitos del cliente, los hemos habilitado para mantener nuestros proyectos en 1.6. Cuando era necesario actualizar a 1.7, tuvimos un tiempo difícil porque teníamos que cambiar la versión de Java por todo el lugar:

  • ajustes específicos POM proyecto predeterminado
  • Eclipse del espacio de trabajo del proyecto
  • la ejecución de la máquina virtual (1.6 fue utilizado para todo)
3

Esta es la causa principal de java 1.5:

También tenga en cuenta que actualmente la configuración de fuente predeterminada es 1.5 y la configuración de destino predeterminada es 1.5, independientemente del JDK con el que ejecute 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 Llanura

<?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> 

Siguiendo plugin está tomada desde una versión POM expandido (POM eficaz),

Esto se puede obtener con este comando desde la línea de comando C:\mvn help:effective-pom I j pongamos aquí un pequeño fragmento en lugar de un pomo entero.

<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 en este caso no se ve donde se define la versión de Java, permite cavar más ...

Descargar el plugin, Apache Maven Compiler Plugin » 3.1 como su disposición en el vaso y abrirlo en cualquier herramienta de compresión de archivos como 7-zip

Traverse el frasco y findout

plugin.xml

archivo dentro de la carpeta

experto compilador-plugin-3.1.jar \ META-INF \ experto \

Ahora se 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> 

Mire el código anterior y descubra 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.

+1

Sí. Esto no tiene nada que ver con Eclipse. Por ejemplo, obtienes el mismo problema en IntelliJ IDEA si creas un proyecto Maven con el artefacto 'quickstart'. –

0

solución más simple en Springboot

te voy a dar el más sencillo si se utiliza uno Springboot:

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

A continuación, haga clic derecho en su proyecto Eclipse: Maven> Proyecto de Actualización> Actualización configuración del proyecto desde pom.xml

Eso debería hacer.

Cuestiones relacionadas