2009-10-22 4 views
7

Gardez à obtenir cette erreur lors de la compilation en utilisant Maven:code source même, Eclipse construire le succès, mais Maven (javac) ne

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

interférences de type Generics ne peut pas être appliqué à des types primitifs. Mais je pensais depuis Java5, que le mécanisme boxing/unboxing fonctionne de manière transparente entre les types primitifs et les classes wrapper.

Dans tous les cas, la chose étrange est Eclipse ne signale aucune erreur et compile heureusement. J'utilise JDK1.6.0_12. Quel pourrait être le problème ici?

Répondre

3

Quelques choses à regarder:

  1. deux Eclipse et Maven utilisent la même installation java/bin
  2. Eclipse et Maven utilisent les mêmes bibliothèques, on pourrait avoir quelque chose d'autre ne fonctionne pas.
+2

Je viens de me rendre compte que le compilateur livré avec Eclipse n'est pas le même que le compilateur Java officiel de Sun. – EnToutCas

11

Ce problème peut se produire lorsque votre code est générique et qu'il appelle une autre méthode qui a un type de retour générique. Parfois, le compilateur est confus en essayant de comprendre comment résoudre le type appel/retour de la méthode.

Il peut être résolu en ajoutant une conversion explicite à votre code.

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

J'ai rencontré la même erreur, utilisez ant. Parce que compilé par ant ou maven, javac utilise JDK pour compiler. Mais dans eclipse, il a JDT, qui peut compiler le succès.

J'ajoute ci-dessous le script dans mon fichier build.xml: <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> Ensuite, ant peut réussir.

Je ne connais pas Maven. Peut-être, il peut définir le compilateur?

Dans mon code source, il y a beaucoup de code comme ceci: public <X> X find(String hql, Object... values) { return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult(); }

Peut-être que votre code aussi.

Mais, utilisez JDT, le succès n'est pas le succès final, en ant. build.xml ne peut réussir que dans Eclipse. lorsque j'exécute la commande ant de Windows, échoue. PS, j'ai des fichiers jar de copie à propos de JDT dans le plugin eclipse au répertoire ant_home/lib.

Souhaitez un peu d'aide pour vous.Et notre problème peut résoudre.

0

Il faut vraiment faire quelque chose avec les versions JDK que maven et eclipse utilisent. Assurez-vous également que le niveau de conformité du compilateur dans eclipse pointe vers la bonne version du JDK.

Questions connexes