10
votes

Maven "n'a pas pu analyser le message d'erreur" (Java 7 + Maven 2)

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


7 commentaires

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 JAR.


@khmarbaise: j'ai ce problème seulement lors de la compilation de la ligne de commande (dans mon cas, MVN Clean Test-compile-compiler ) à 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.


5 Réponses :


1
votes

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.

Je vais essayer votre projet de test et voir si je peux vous donner plus d'informations.

EDIT:

J'ai donc trouvé quelques choses intéressantes. Tout d'abord, j'ai pu obtenir votre projet de travailler sans beaucoup de fanfare :(

J'ai changé votre pom en: xxx

par défaut , votre fichier de test ne s'exécutera pas. Je l'ai refoutué, il est donc maintenant nommé le même qui exécutera réellement le test.

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.


8 commentaires

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 d'exécution au lieu de fourni . 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 (ou toute autre bibliothèque), il doit être marqué comme fourni pour que le compilateur GWT puisse compiler contre elle. Si elle est marquée comme d'exécution 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 à partir du bocal GUAVA-GWT 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 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).



2
votes

convertir mon commentaire en une réponse ...

Le fichier POM exact avec la classe de test ci-dessus compile une amende sur ma boîte Windows avec Maven 3.0.4.

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.


0 commentaires

22
votes

TL; DR

Maven 2 et JDK 7 sont incompatibles, car Maven essaie d'analyser la sortie Javac qui a changé dans JDK 7. P>

Explication complète H2>

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>

  • se produit avec Java 7 et Maven 2.2.1 Li>
  • ne se produit pas avec Java 7 et Maven 3 + Li>
  • ne se produit pas avec Java 6 et Maven 2.2.1 Strong> Li> ul>

    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 GUAVA-GWT CODE> se produisant em> et plus à faire avec Maven ne sachant pas comment gérer les erreurs correctement. P>

    Pour tester cela, j'ai créé un projet maven séparé qui n'a rien à voir avec GUAVA: 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] ------------------------------------------------------------------------
    


1 commentaires

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



2
votes

Pour un problème similaire, j'ai mis à niveau Maven-compiler-plugin à une version ultérieure.


0 commentaires

2
votes

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é.


0 commentaires