Comment puis-je obtenir Eclipse pour résoudre les classes générées avec Maven 2?

J’utilise les tampons de protocole Google pour générer des classes Java pour mon projet. En utilisant Maven 2 et son plug-in “antrun”, ces classes sont fraîchement générées avant la compilation, sorties vers target / generate-sources et placées sur le classpath pendant la construction. Donc, construire le projet à partir du POM ne pose aucun problème.

Cependant, Eclipse ne sait pas comment résoudre la classe générée, car le dossier dans lequel il se trouve ne semble pas se trouver sur le classpath de l’EDI pendant le développement. J’utilise m2eclipse et je gère les dépendances pour moi, donc je m’attendais à ce que Maven s’en occupe.

Comment puis-je obtenir le support IDE (complétion du code, etc.) pour le code généré?

m2eclipse ne supporte pas cela. Vous devez append manuellement le dossier target/generated-sources tant que dossier source. Lorsque vous indiquez à m2eclipse de “mettre à jour la configuration du projet”, celle-ci sera écrasée et vous devrez la restaurer.

Assurez-vous également qu’Eclipse recherche les modifications dans l’espace de travail.

Il peut y avoir des problèmes, cependant. Finalement, vous rencontrerez des erreurs qui empêchent la compilation d’une classe, car une autre classe ne peut pas être résolue. L’achèvement du code fonctionnera, cependant. La cause principale de ce problème est que Eclipse est confus lorsque Maven modifie les fichiers de classe dans la target .

Pour résoudre ce problème, vous devez indiquer à Eclipse de comstackr à un endroit différent de Maven .

m2eclipse soutient cela. Tout d’abord, ajoutez le chemin d’access à votre chemin de génération:

  org.codehaus.mojo build-helper-maven-plugin 1.8   add-source generate-sources  add-source    ${project.build.directory}/generated-sources/java/      

Deuxièmement, ajoutez le support à m2e:

    org.eclipse.m2e lifecycle-mapping 1.0.0      org.codehaus.mojo build-helper-maven-plugin [1.0,)  parse-version add-source maven-version add-resource add-test-resource add-test-source     true true          

La deuxième étape pourrait ne pas être nécessaire si votre installation eclipse a installé le plug-in “org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml”. Ce plugin est disponible via Window -> Preferences -> Maven -> Discovery. Actuellement, cela ne fonctionne pas chez Eclipse Kepler. Par conséquent, j’ai récupéré le JAR (lié à partir du fichier XML indiqué dans l’ URL du catalogue ) et extrait les fragments de org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml à la main.

Ce que vous devriez voir dans votre explorateur de projet est un conteneur nommé “Dépendances Maven” à la place des “bibliothèques référencées” habituelles. Cela signifie que m2eclipse gère votre chemin de compilation.

Dans mon cas, pour y parvenir, j’ai coché “Inclure les modules” et décoché “Ignorer le plugin du compilateur Maven lors du traitement des ressources” dans la section “Maven” de Project-> Properties.

Personnellement, j’ai résolu ce problème en configurant les classes générées comme un projet distinct et en en faisant une dépendance dans mon projet principal (non généré). J’utilisais wsdl2java pour générer des classes webservice, donc la “source” de mon sous-projet était wdsl et xsds. Bien fonctionné même lorsque le wsdl changeait régulièrement.

J’ai eu ce problème avec le code généré en utilisant Maven et wsdl2java et voici ce que j’ai fait dans Eclipse Juno pour le résoudre. Supposons que mon projet s’appelle project1:

  1. Cliquez avec le bouton droit sur project1 et sélectionnez Propriétés
  2. Choisissez Java Build Path à partir de la gauche et sélectionnez l’onglet Bibliothèques
  3. Cliquez sur Ajouter un dossier de classe
  4. Sélectionnez le répertoire bin et cliquez sur OK (project1 / target / generate-sources / bin)
  5. Cliquez sur OK et actualisez le projet

En prime, vous pouvez également joindre le code source:

  1. Cliquez sur la flèche à côté du nouveau dossier de classe que vous venez de créer
  2. Cliquez sur la pièce jointe source
  3. Cliquez sur le bouton Modifier
  4. Définir le chemin d’access vers / project1 / target / generate-sources / axis2 / src
  5. Cliquez sur OK

Avez-vous essayé d’actualiser le projet Eclipse?

alt text http://soffr.miximages.com/eclipse/eclipse_refresh.png

Lorsqu’un outil externe génère de nouveaux fichiers ou met à jour les anciens, Eclipse ne sera pas en mesure de détecter le changement jusqu’à la prochaine demande.

Une autre option consisterait à définir un nouveau générateur personnalisé, en spécifiant que ce générateur “actualise les ressources à la fin”:

alt text http://soffr.miximages.com/eclipse/eclipse_refresh.gif

  1. Cliquez avec le bouton droit de la souris sur le projet et sélectionnez Propriétés.
  2. Choisissez Java Build Path à partir de la gauche et sélectionnez l’onglet Source
  3. Cliquez sur Ajouter un dossier
  4. Sélectionnez le répertoire bin et cliquez sur OK
  5. (projet / target / generate-sources / xxxx) Cliquez sur OK et actualisez le projet

Comment puis-je obtenir le support IDE (complétion du code, etc.) pour le code généré?

En règle générale, j’appendais le plugin m2e lifecycle-mapping au fichier pom.xml comme décrit dans la réponse de @koppor. Cependant, l’ajout de code par éclipse à mes fichiers pom.xml n’est pas une option au travail qui est principalement une boutique IntelliJ.

Ma solution ajoute d’abord le build-helper-maven-plugin au fichier pom.xml qui fonctionne correctement depuis la ligne de commande mais pas dans éclipse.

  org.codehaus.mojo build-helper-maven-plugin   generate-sources  add-source    ${project.build.directory}/generated-sources/      

Pour réparer eclipse, j’ai installé le connecteur Apt M2E sur le marché Eclipse. Je pense que les choses ont commencé à fonctionner juste après que j’ai redémarré puis reconstruit tous mes projets. Je vois maintenant ce qui suit dans mes répertoires sources:

 src/main/java target/generated-sources ... 

Fonctionnalité!

Pour générer des fichiers source Java à partir de fichiers .proto , utilisez le plug- .proto Protocol Buffers qui fonctionne .proto dans eclipse Oxygen.

Utilisation de base ( voir ici pour une description détaillée ):

  • assurez-vous que le compilateur de protoc natif est installé sur votre système

  • mettez à jour votre fichier pom.xml :

    • assurez-vous d’utiliser au moins Java 6 (Java 7+ est recommandé)

    • append une invocation de plugin

    • Ajoutez la dépendance correspondante pour com.google.protobuf:protobuf-java

  • Placez vos fichiers .proto dans le répertoire src/main/proto

  • mettre à jour le projet (via Maven -> Update project... )

Exemple pom.xml :

  ...     org.apache.maven.plugins maven-comstackr-plugin 3.7.0  1.6 1.6     org.xolstice.maven.plugins protobuf-maven-plugin 0.5.1  /usr/local/bin/protoc     comstack test-comstack     ...     com.google.protobuf protobuf-java 3.5.1  ...  ...  

Quelques notes supplémentaires:

  • si l’exécutable protoc est dans le PATH, l’entrée de configuration protocExecutable peut être omise

  • les définitions de message protobuf test uniquement peuvent être placées dans le répertoire src/test/proto

  • Je recommande d’installer Protocol Buffer Descriptor Editor ( lien vers la place de marché )

Bonne chance!