Comment puis-je obtenir Eclipse pour résoudre les classes générées avec Maven 2?
J'utilise des tampons de protocole Google pour générer des classes Java pour mon projet. En utilisant Maven 2 et son plugin "antrun", ces classes sont fraîchement générées avant la compilation, sorties vers target/generated-sources et mises sur le classpath pendant la construction. Donc, construire le projet à partir du POM n'est pas un problème.
Cependant, Eclipse ne sait pas comment résoudre la classe générée, car le dossier dans lequel elle se trouve ne semble pas être sur le chemin de classe de l'IDE pendant le développement. Je suis l'aide de m2eclipse et qu'il gère les dépendances pour moi, donc je m'attendais à ce que Maven s'occupe de cela.
Comment puis-je obtenir le support IDE (complétion de code, etc.) pour le code généré?
9 réponses
M2eclipse ne supporte pas cela. Vous devez ajouter manuellement le dossier target/generated-sources
en tant que dossier source. Lorsque vous dites à m2eclipse de "mettre à jour la Configuration du projet", cela sera écrasé et vous devrez le restaurer.
Assurez-vous également Qu'Eclipse recherche les modifications dans l'espace de travail.
Il pourrait y avoir quelques problèmes, cependant. Finalement, vous rencontrerez des erreurs qu'une classe ne peut pas être compilée car une autre classe ne peut pas être résolue. L'achèvement du Code fonctionnera cependant. La cause de racine de ce problème est que Eclipse est confus lorsque Maven change les fichiers de classe dans target
.
Pour résoudre ce problème, vous devez indiquer à Eclipse de compiler à un endroit différent de Maven.
M2eclipse le supporte. Tout d'abord, ajoutez le chemin à votre chemin de construction:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/java/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Deuxièmement, ajoutez le support pour cela à m2e:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>parse-version</goal>
<goal>add-source</goal>
<goal>maven-version</goal>
<goal>add-resource</goal>
<goal>add-test-resource</goal>
<goal>add-test-source</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
La deuxième étape peut ne pas être nécessaire, si votre installation eclipse a installé le "org.Eclipse.m2e.de la découverte.lifecyclemapping.buildhelper.plugin" xml". Ce plugin est disponible via la Fenêtre -> Préférences -> Maven -> Découverte. Actuellement, cela ne fonctionne pas ici à Eclipse Kepler, par conséquent, j'ai récupéré le pot (lié à partir du xml montré dans le 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é " Maven Dependencies "à la place des"bibliothèques référencées" habituelles. Cela signifie que m2eclipse gère votre chemin de construction.
Dans mon cas, pour y parvenir, j'ai vérifié "Include Modules" et un vérifié "ignorer le plugin du compilateur Maven lors du traitement des ressources" sur la section "Maven" du Projet - > Propriétés.
Personnellement, j'ai résolu ce problème en configurant les classes générées en tant que projet séparé et en ai fait une dépendance dans mon projet principal (non généré). J'utilisais wsdl2java pour générer des classes webservice donc la" source " dans mon sous-projet était le wdsl et xsds. A 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:
- Cliquez avec le bouton droit sur Projet1 et sélectionnez Propriétés
- Choisissez Java Build Path à partir de la gauche et sélectionnez L'onglet Libraries
- Cliquez Sur Ajouter Un Dossier De Classe
- Sélectionnez le répertoire bin et cliquez sur OK (projet1/target/generated-sources/bin)
- Cliquez sur OK et actualisez le projet
En prime, vous pouvez également joindre le code source:
- Cliquez sur la flèche en regard du nouveau dossier de classe que vous venez de créer
- Cliquez sur la pièce jointe source
- Cliquez sur le bouton Modifier
- Définissez le chemin sur / project1/target/generated-sources/axis2 / src
- Cliquez sur OK
Avez-vous essayé de rafraîchir le projet Eclipse?
Le texte d'Alt http://oyvindhauge.com/blog/wp-content/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 la modification avant la prochaine requête.
Une autre option serait de définir un nouveau générateur personnalisé, en spécifiant que ce générateur "actualise les ressources à la fin":
Texte Alt http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif
- cliquez avec le bouton droit sur projet et sélectionnez Propriétés
- Choisissez Java Build Pathà partir de la gauche et sélectionnez L'onglet Source
- Cliquez Sur Ajouter Un Dossier
- Sélectionnez le répertoire bin et cliquez sur OK
- (project/target/generated-sources/xxxx) cliquez sur OK et actualisez le projet
Comment puis-je obtenir le support IDE (complétion de code, etc.) pour le code généré?
Typiquement, j'ajouterais le plugin de mappage de cycle de vie m2e au pom.fichier xml comme décrit dans la réponse de @koppor. Cependant, en ajoutant du code per-eclipse à mon pom.les fichiers xml ne sont pas une option au travail qui est principalement un magasin IntelliJ.
Ma solution ajoute d'abord le build-helper-maven-plugin
au pom.xml qui fonctionne bien à partir de la ligne de commande mais pas dans eclipse.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Pour réparer eclipse j'ai installé le Connecteur apt m2e du marché Eclipse. Je pense que les choses ont commencé à fonctionner juste après avoir redémarré puis reconstruit tous mes projets. Je vois maintenant ce qui suit dans Mes dirs source:
src/main/java
target/generated-sources
...
Fonction!
Pour générer des fichiers source Java à partir des fichiers .proto
, utilisez le Plugin Protocol Buffers qui fonctionne prêt à l'emploi dans eclipse Oxygen.
Utilisation de Base (voir ici pour une description détaillée):
Assurez-vous que natif
protoc
compilateur est installé sur votre système-
Mettez à jour votre fichier
pom.xml
:-
Assurez-vous d'utiliser au moins Java 6 (Java 7+ est recommandé)
Ajouter un plugin invocation
Ajoutez la dépendance correspondante pour
com.google.protobuf:protobuf-java
-
-
Mettez votre .fichiers proto dans le répertoire
src/main/proto
du projet Mettre à jour le projet (via
Maven -> Update project...
)
Exemple pom.xml
:
<project>
...
<build>
<plugins>
<!-- Require at least Java 6 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- Generate .java files from .proto definitions -->
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.1</version>
<configuration>
<protocExecutable>/usr/local/bin/protoc</protocExecutable>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.5.1</version>
</dependency>
...
</dependencies>
...
</project>
Quelques notes supplémentaires:
-
Si l'exécutable
protoc
se trouve dans le chemin, l'entrée de configurationprotocExecutable
peut être omise -
Test-seulement protobuf message définitions peut être mis en le répertoire du projet
src/test/proto
Je recommande l'installation de Protocole Descripteur de Tampon de l'Éditeur (marketplace lien)
Bonne chance!