2011-07-03 19 views
7

Estoy usando maven3.03 y Eclipse 3.5 en Windows XP. Convertí un viejo proyecto web para estar en el estilo de configuración maven.
Cuando compilo el proyecto en eclipse todo se compila.
Nota: Classpath contiene: Maven Dependencies y JDK (1.6_018).
Cuando compilo desde línea de comandos usando mvn, obtengo algunos errores:
1.package com.sun.xml.internal.stream.buffer.stax no existe.
com.sun.xml.internal.stream.writers 2.Package no existe
3.cannot encontrar el símbolo - símbolo: la clase XMLDOMWriterImpl
4.package com.sun.xml.internal.messaging.saaj.util hace no existe
com.sun.xml.internal.bind.v2.runtime.unmarshaller 5.package no existe
6.cannot encontrar el símbolo - símbolo: NamespaceContexHelper clase
7.cannot encontrar el símbolo símbolo: ByteOutputStream claseLa compilación de Maven falla mientras eclipse tiene éxito

Puedo ver que esto es algo con tarro de sol. Pero simplemente no puedo entender por qué eclipse está bien y la línea de comando no.

EDITAR: Uno de los errores que no he mencionado en la lista anterior es:

[ERROR]<path>\EventsViewer.java:[54,69] inconvertible types found: <br>java.util.SortedMap<java.util.Date,java.util.List<com.myClass>> 
required: java.util.Map<? extends java.util.Date,? extends java.util.List<com.myOtherClass>> 


cuando veo la misma línea en Eclipse me sale la advertencia:

Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
List<myOtherClass>> 

En Eclipse, recibo una advertencia y, en maven, recibo un error. Revisé org.eclipse.jdt.core.prefs y veo que la configuración es org.eclipse.jdt.core.compiler.problem.forbiddenReference = warning.

Actualización: Me han leído algunos de los errores anteriores. El "problema" es que en eclipse aparece como importación no utilizada. Stangly Maven informa esto como un error. Después de eliminar esta importación no utilizada, el error desapareció. Pero todavía problema 3 y 7 occures

Conclusión: Supongo que las advertencias se convierten en errores en el javac. ya que no utilizo ningún supressWarnings. Me sorprende que el error sea diferente. ¿Qué es?

+0

más probable es que su 'JAVA_HOME' isnt' ubicada en el entorno de Maven. –

+0

¿Qué plataformas que se están ejecutando en Maven y Eclipse? – Arpit

Respuesta

2

Comprueba nuevamente que estás utilizando el mismo JDK para las compilaciones de Eclipse y Maven. Incluso si crees que lo estás, vuelve a verificarlo de todos modos.

Estos paquetes son algunos de los que se incluyen en algunas versiones de Java y otras no.

+0

1 si la versión de java se diferencia, añadiendo el experto compilador-plugin con configuración de origen y destino apuntando hacia 1.6 y actualizar la configuración del proyecto desde el menú contextual del proyecto Maven resolverá el problema en muchos casos – Omnaest

+0

Para ser claros, estoy hablando del directorio real para el que se usa Java en lugar de Java 5 vs Java 6 –

+0

Ok lo agregué como respuesta separada para no confundir a alguien – Omnaest

0

Si la versión Java difiere, añadiendo el maven-compiler-plugin

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <target>1.6</target> 
        <source>1.6</source> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

con la configuración de la fuente y de destino apuntando hacia 1.6 y actualizar la configuración del proyecto en el menú de contexto del proyecto Maven va a resolver el cabo de un problema de sincronización en muchos casos (lo que conduce a resultados diferentes de compilación):

enter image description here

+0

gracias. Probé el plugin maven-compiler mientras escribías y no sirvió. No probé tu segunda sugerencia ("Actualizar configuración del proyecto") (a veces cambia mi .classpath de una manera extraña) pero intentaré eso de nuevo y te lo haré saber. Gracias de nuevo. – ronk

+0

No funcionó. Lo extraño es que cambia el archivo .classpath con J2SE_1.6 en lugar de eclipse que usa JDK1.6_018. – ronk

9

Ésta es la verdadera razón tal vez from maven forum's answer

"Jerome es correcto que no se recomienda el uso de la práctica com.sun clases de rt.jar Y especialmente los marcados. 'interno', no eres más que pidiendo problemas

.

Sin embargo, tenía curiosidad sobre esto, así que probé. La clase anterior puede ser accedida por Eclipse al . Sin embargo, la compilación del código en la línea de comandos con javac falla con el error "no existe". Así que mi suposición es que el compilador de Java de Sun detecta cuándo se está accediendo a una clase especial "interna" y se niega a importar la clase. Eclipse usa un compilador diferente que presumiblemente no tiene esta comprobación.

Maven solo usa el compilador javac disponible en la ruta de ejecución del sistema . Por lo tanto, el problema no tiene nada que ver con Maven en absoluto. Es el compilador al que maven invoca y que se niega a compilar la fuente. No puedo ver ningún indicador público en la línea de comando javac para desactivar este "bloqueo" del acceso interno, así que a menos que desee evitar el uso del compilador javac de Sun , deberá evitar el uso de esta clase interna.

Sólo por diversión, he probado la sugerencia de poner rt.jar en la ruta de clase de Jerome: -cp javac /usr/java/jdk1.6.0_03/jre/lib/rt.jar Foo.java pero eso todavía no se pudo compilar.

El ByteOutputStream clase puede cargarse en tiempo de ejecución a través de Class.forName ("..").

Es curioso que un proyecto en el que estoy trabajando importa la clase com.sun.org.apache.xml.internal.utils.SAXSourceLocator; y esto funciona bien. Se emiten advertencias, pero el código se compila (y sí, está en mi lista de cosas por hacer para arreglar esto :-). Por lo tanto, no es todas las clases internas que están siendo bloqueadas, solo las seleccionadas. "

0

Este es mi caso: Tengo el mismo error en IntelliJ después de añadir //TODO, IntelliJ añade automáticamente esta línea en la sección de importación import com.sun.xml.internal.bind.v2.TODO;

Después de quitar la línea de importación anterior, el problema resuelto ahora que puedo. capaz de compilar con éxito utilizando Maven

Cuestiones relacionadas