J'ai un projet GWT basé sur Maven qui inclut Guava. Je rencontre des problèmes avec Maven essayant (et échouer) de compiler les sources qu'il trouve dans GUAVA-GWT * .jar code>:
mark@mark-peters:~/devel/guava-problem$ mvn -V clean test-compile
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.7.0
Java home: /usr/lib/jvm/jdk1.7.0/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-38-generic" arch: "amd64" Family: "unix"
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - guava-problem:guava-problem:jar:1.0
[INFO] task-segment: [clean, test-compile]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting file set: /home/mark/devel/guava-problem/target (included: [**], excluded: [])
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/mark/devel/guava-problem/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/mark/devel/guava-problem/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to /home/mark/devel/guava-problem/target/test-classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
/home/mark/.m2/repository/com/google/guava/guava-gwt/11.0.1/guava-gwt-11.0.1.jar(com/google/common/collect/AbstractMultiset.java):[19,0] error: cannot find symbol
could not parse error message: symbol: static setCountImpl
location: class
/home/mark/.m2/repository/com/google/guava/guava-gwt/11.0.1/guava-gwt-11.0.1.jar(com/google/common/collect/AbstractMultiset.java):100: error: cannot find symbol
return setCountImpl(this, element, count);
^
could not parse error message: symbol: method setCountImpl(AbstractMultiset<E>,E,int)
location: class AbstractMultiset<E>
where E is a type-variable:
E extends Object declared in class AbstractMultiset
/home/mark/.m2/repository/com/google/guava/guava-gwt/11.0.1/guava-gwt-11.0.1.jar(com/google/common/collect/AbstractMultiset.java):105: error: cannot find symbol
return setCountImpl(this, element, oldCount, newCount);
^
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Feb 21 12:49:42 EST 2012
[INFO] Final Memory: 18M/212M
[INFO] ------------------------------------------------------------------------
5 Réponses :
Il semble que cela n'essaye pas de compiler les bibliothèques de goyava, mais sans le journal de construction complète de Maven, nous ne pouvons pas le dire.
À en juger par les informations que vous avez postées jusqu'à présent, cela apparaîtrait à la place que vous avez deux versions incompatibles d'une classe ou d'une bibliothèque sur votre path pendant la compilation. P>
Je vais essayer votre projet de test et voir si je peux vous donner plus d'informations. P>
EDIT: p>
J'ai donc trouvé quelques choses intéressantes. Tout d'abord, j'ai pu obtenir votre projet de travailler sans beaucoup de fanfare :( p>
J'ai changé votre pom en: p> par défaut , votre fichier de test ne s'exécutera pas. Je l'ai refoutué, il est donc maintenant nommé Je cours Maven v2.2.1 sur OSX. J'ai aussi nettoyé mon ~ / .m2 / référentiel avant de commencer. Je vous suggère d'essayer de la même chose: Nuke votre dossier de référentiel local et réessayez votre construction. Si cela ne fonctionne pas, permettez-moi de savoir quelle version de Maven vous courez. p> p> le même code> qui exécutera réellement le test. P>
Merci pour la réponse. Permettez-moi d'abord de m'excuser pour le nom de fichier de test étrange; Ce n'était pas important pour la question que le test exécuté réellement depuis l'échec était en compilation, donc je ne pensais pas à lui donner un bon nom. Maintenant, en ce qui concerne votre changement d'utilisation code> d'exécution code> au lieu de fourni code>. Je suis assez nouveau pour intégrer GWT et Maven, mais mon court désintendant est que si j'ai le code GWT qui nécessite
GUAVA-GWT code> (ou toute autre bibliothèque), il doit être marqué comme
fourni code> pour que le compilateur GWT puisse compiler contre elle. Si elle est marquée comme
d'exécution code> Je ne pense pas que mon code GWT puisse y référoir.
Vous mentionnez qu'il n'apparaît pas que cela tente de compiler GUAVA, et cela ressemble plutôt à des fichiers incompatibles. Pouvez-vous développer? L'erreur postée est une erreur de compilation lors de la tentative de compilation abstractmultiset.java code> à partir du bocal code> GUAVA-GWT CODE> JAR, donc je ne sais pas si je suis d'accord avec votre premier point. Je vais essayer de poster plus de la sortie Maven.
Fourni des moyens "fournis par le conteneur au moment de l'exécution, mais nous l'ajouterons temporairement à la Compile ClassPath." Runtime signifie "inclus dans ma guerre / oreille au moment de l'exécution, mais pas disponible pour le compilateur." Si le pot GUAVA-GWT est dans votre annuaire de votre serveur, la portée appropriée est fournie. Si le JAR GUAVA-GWT est tenu de compiler votre code, il doit être défini sur la portée de la compilation. S'il n'est pas nécessaire de compiler, et non fourni par le coup, mais est nécessaire pour exécuter l'application, la portée appropriée est exécutée.
BTW, avez-vous essayé d'effacer votre référentiel local?
Avec GWT, il est plus compliqué. GWT compile Java Source dans JavaScript et le fait pendant la construction Maven. Le JavaScript produit produit est autonome et côté client, n'a rien à voir avec le conteneur. Il a besoin de certains pots (contenant spécifiquement des fichiers source) au moment de la compilation afin de pouvoir le convertir en JavaScript. Pour ce faire, il tire dessus sur les scopes maven mais aucun n'est un match parfait. Fourni est le plus proche car il ne fera aucun bien d'avoir GUAVA-GWT CODE> disponible pour le code du serveur.
J'ai donné le nettoyage du repo local un coup de feu; J'ai le même résultat malheureusement! Merci de votre attention jusqu'à présent (si vous n'avez pas encore vu les commentaires de la question, il semble que le problème ne se produise pas dans Maven 3+)
Pouvez-vous publier toute votre sortie Maven Build Sortie du début à la fin?
Regarde à nouveau à la sortie complète Maven m'a vraiment aidé à atteindre les conclusions que je viens d'ajouter comme une réponse. Merci beaucoup pour votre aide, désolé d'avoir pris si longtemps pour vous mettre la sortie complète (long week-end).
convertir mon commentaire en une réponse ... p>
Le fichier POM exact avec la classe de test ci-dessus compile une amende sur ma boîte Windows avec Maven 3.0.4. p>
Le problème pourrait être avec la version Maven que vous utilisez. Ou il pourrait y avoir d'autres objectifs maven à la POM, ce qui peut causer un problème. P>
Maven 2 et JDK 7 sont incompatibles, car Maven essaie d'analyser la sortie Javac qui a changé dans JDK 7. P>
Nothuram's note que Cela a fonctionné pour lui à Maven 3+ m'a emmené sur la route de l'exploration de cela et non d'un problème de configuration, mais comme un problème maven réel. J'ai commencé à faire plus de tests et j'ai constaté que ce problème: p>
Donc, à ce stade, il est devenu clair que les erreurs "ne pouvaient pas analyser les erreurs d'erreur" étaient pertinentes et que le problème avait probablement moins à voir avec la compilation Pour tester cela, j'ai créé un projet maven séparé qui n'a rien à voir avec GUAVA: P> GUAVA-GWT CODE> se produisant em> et plus à faire avec Maven ne sachant pas comment gérer les erreurs correctement. P>
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_20
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-38-generic" arch: "amd64" Family: "unix"
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - maven-problem:maven-problem:jar:1.0
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/mark/devel/maven-problem/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to /home/mark/devel/maven-problem/target/classes
[WARNING] /home/mark/devel/maven-problem/src/main/java/ClassWithWarnings.java:[1,7] [serial] serializable class ClassWithWarnings has no definition of serialVersionUID
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue Feb 21 13:18:39 EST 2012
[INFO] Final Memory: 9M/150M
[INFO] ------------------------------------------------------------------------
J'ai confronté ce problème pour Maven 3.3.3 et Java 8, il a fonctionné une fois que j'ai heurté la version de Java à 7
Pour un problème similaire, j'ai mis à niveau Maven-compiler-plugin à une version ultérieure. P>
nous est arrivé à nous, que nous avons reçu exactement le même échec, mais avec des grades au lieu de Maven. Après avoir commuté de ArrayListMultimap à LinkedListMultMulmap à une erreur est parti. Donc, il semble que, dans la version 11.0.2, au moins, l'arraylistMultimap est cassé. P>
En premier lieu, pourquoi voulez-vous une source GUAVA-GWT? Vous pouvez utiliser le pot sans la source dans Maven?
Avez-vous vérifié pour compiler / exécuter sur la ligne de commande via Package Nettoyage MVN? Ou utilisez-vous cela dans Eclipse / Netbeans?
@Sajan: Les sources sont incluses dans le pot normal car GWT compile Java Source dans JavaScript. Je ne tire pas le pot source de Maven, il s'agit uniquement du standard
GUAVA-GWT CODE> JAR.
@khmarbaise: j'ai ce problème seulement i> lors de la compilation de la ligne de commande (dans mon cas,
MVN Clean Test-compile-compiler code>) à ce stade. J'utilise Intellij qui semble être capable de construire sans problème. Merci, j'ai clarifié cela dans la question.
Le fichier POM exact avec la classe de test ci-dessus compile une amende sur ma boîte Windows avec Maven 3.0.4. Quelle est la version maven? Le POM a-t-il d'autres objectifs qui peuvent être pertinents?
@Raghuram: Intéressant, j'ai pu reproduire avec exactement la structure du projet que je décris ci-dessus. Je vais voir quelle version maven j'utilise.
@Raghuram: aha! Je n'ai en effet pas le problème avec Maven 3, mais faites avec la dernière version de Maven 2. Je vais essayer de voir si je peux trouver une liste de bugfix pour ce problème à ajouter pour la postérité, mais si vous êtes incliné Pour publier votre commentaire comme une réponse qui serait celle que j'avais enclins à octroyer la prime.