2009-10-22 13 views
7

deja de recibir este error al compilar usando Maven:mismo código fuente, Eclipse construir el éxito, pero Maven (javac) no

type parameters of <X>X cannot be determined; no unique maximal instance exists for type variable X with upper bounds int,java.lang.Object 

Genéricos tipo de interferencia no se puede aplicar a los tipos primitivos. Pero pensé que desde Java5, el mecanismo de boxeo/unboxing funciona a la perfección entre los tipos primitivos y las clases contenedoras.

En cualquier caso, lo extraño es que Eclipse no informa ningún error y se compila felizmente. Estoy usando JDK1.6.0_12. ¿Cuál podría ser el problema aquí?

Respuesta

3

Algunas cosas que ver:

  1. Tanto Eclipse y Maven están utilizando la misma instalación java/bin
  2. Eclipse y Maven están utilizando las mismas bibliotecas, uno podría tener algo que el otro no.
+2

Me acabo de dar cuenta de que el compilador enviado con Eclipse no es el mismo que el compilador Java oficial de Sun. – EnToutCas

11

Este problema puede ocurrir cuando el código es genérico y llama a otro método que tiene un tipo de devolución genérico. Algunas veces el compilador se confunde tratando de descubrir cómo resolver el tipo de llamada/devolución del método.

Se puede resolver agregando un molde explícito a su código.

// Old code: 
public T getValue() { 
    return otherMethod(); // otherMethod has the signature: <RT> RT otherMethod() { ... } 
} 

// New code: 
@SuppressWarnings("unchecked") 
public T getValue() { 
    return (T) otherMethod(); // the cast tells the compiler what to do. 
} 
0

Me encontré con el mismo error, use hormiga. Porque cuando compila por ant o maven, javac usa JDK para compilar. Pero en eclipse, tiene JDT, que puede compilar el éxito.

Agrego la secuencia de comandos siguiente en mi archivo build.xml: <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> Luego, hormiga puede construir éxito.

No estoy familiarizado con Maven. Tal vez, ¿puede configurar el compilador?

En mi código fuente, hay muchas código como este: public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); }

Tal vez su código también.

Pero, use JDT, el éxito no es el éxito final, en hormiga. build.xml puede generar éxito solo en eclipse. cuando ejecuto el comando ant from windows, falla. Tire otro error: Class not found: org.eclipse.jdt.core.JDTCompilerAdapter

PD, Tengo copia de archivos jar sobre JDT en eclipse plugin para el directorio ant_home/lib.

Le deseo un poco de ayuda. Y nuestro problema puede resolverlo.

0

Definitivamente tiene que hacer algo con las versiones de JDK que Maven y Eclipse están usando. También asegúrese de que su nivel de cumplimiento del compilador en eclipse apunta a la versión correcta de JDK.

Cuestiones relacionadas