12
votes

Utilisez le compilateur Eclipse dans un composant maven

Je travaille sur un projet assez gros maven et je me développe en Java avec Eclipse.

Pour économiser du temps de compilation, je voudrais que Maven et Eclipse partagent la même cible que j'ai réussi à faire. Cependant, quand je compile avec Maven, Eclipse manque de choses qu'il met dans le bytecode, alors il recompille tout (de ce que je comprends). Je parle de la fonctionnalité "Construire automatiquement" ici, donc ce n'est pas Eclipse déléguant la construction à Maven.

Pour résoudre ceci, je pensais que je demanderais à Maven d'utiliser le même compilateur que Eclipse. Après une recherche sur le Web, j'ai découvert que je pouvais ajouter ceci dans le haut pom : xxx

Ceci semble fonctionner, mais la construction échoue assez rapidement avec beaucoup de erreurs, alors qu'elle réussit avec Javac. Je ne sais pas pourquoi, mais il semble qu'il y ait des conflits liés à Le fait que les fichiers Java défaillant sont générés des fichiers.

Donc, je pensais que je pouvais essayer d'utiliser le compilateur Eclipse uniquement pour le composant que je travaille sur (qui n'a pas ce genre de généré des dossiers). J'ai ajouté l'extrait ci-dessus dans le pom de mon composant, mais quand La construction atteint mon composant, l'erreur suivante est relevée:

pas de ce compilateur 'Eclipse'

J'ai également essayé d'ajouter le plexus-compiler-eclipse Dépendance dans le Dépendances énumérées dans le haut pom, mais même erreur.

Savez-vous si ce que j'essaie de faire est possible? Toute idée de la façon dont je peux le faire?


0 commentaires

4 Réponses :


1
votes

Je devinerais que vos problèmes découlent du projet Eclipse et maven POM ne sont pas en train d'être synchronisé. Je vous suggère d'utiliser le Plugin M2eclipse pour garder Maven et Eclipse en synchronisation. Cela configurera votre projet Eclipse en utilisant le POM comme configuration «Master».

Je ne pense pas que vous devez configurer spécifiquement le compilateur à utiliser, mais vous devez configurer le plugin Maven-compiler comme vous le faites déjà.


1 commentaires

J'utilise déjà m2eclipse déjà. Les projets Eclipse sont générés par Eclipse à partir de fichiers POM. Peut-être que je devrais mentionner: quand je dis "Eclise reconstruit tout", je parle de la fonctionnalité "Construire automatiquement" d'Eclipse. J'en ai besoin pour faire un swap chaud.



-2
votes

Je ne suis pas sûr à 100% de ce que vous essayez d'atteindre ici, mais cela ressemble à une mauvaise idée. Premièrement, vous devriez avoir Eclipse configuré pour être utiliser un SDK sur votre système et Maven devrait utiliser la même chose. Donc, je ne comprends pas pourquoi vous pensez que Eclipse ajoute quelque chose au code d'octet que Maven ne serait pas donné qu'ils utilisent tous les deux le même compilateur.

Deuxièmement, je n'essayerais pas d'utiliser des composants Eclipse dans une construction maven. Ils sont designs pour travailler dans l'IDE Eclipse afin de les amener à travailler en dehors de cela est généralement semé de problèmes. Je l'ai vu fait, mais c'était un piratage et n'a pas produit de très bons résultats.

Thremently si vous rencontrez des problèmes de performance avec une construction maven (pas rare), il y a quelques choses que vous pouvez faire. Tout d'abord décomposer la construction et travailler là où se passe le moment. Mon expérience est que ce n'est généralement pas la compilation qui est le problème. Voici une liste de choses que j'ai vues ralentissement des constructions:

  • Essais de mauvaise qualité. Habituellement lent à démarrer des tests d'intégration composés avec des tests réellement des tests d'unités fonctionnant comme des intégrations.

  • coobertura. Super outil, mais à cause de la façon dont Maven fonctionne, le plug-in Cobertura doit exécuter toutes les phases des ressources à la compilation à nouveau. Une fois, j'ai rasé 40% de rabais sur une longue construction Maven en écrivant un plugin pour arrêter les tests jusqu'à ce qu'ils sont gérés par la phase de Cobertura.

  • sur le bâtiment. c'est à dire. y compris les sous-modules qui ne changent essentiellement jamais. Meilleur choix consiste à créer un profil qui inclut ces sous-mobules uniquement lorsque cela est nécessaire ou de casser une version complètement séparée.

  • Tests d'intégration longue. Si les tests d'intégration prennent beaucoup de temps, envisagez de les mettre dans un profil différent et une construction différente sur le serveur CI. Ensuite, votre construction principale peut aller plus vite permettant aux développeurs de revenir au travail plus tôt, tandis que les tests d'intégration peuvent courir moins souvent.

  • Enfin - admettez que Maven est un porc de performance et de passer à quelque chose de plus rapidement. La fourmi est probablement toujours la plus rapide mais une douleur à configurer car vous devez tout configurer manuellement. Je suggérerais d'essais Grandle car il corrige beaucoup de problèmes que les fourmi et maven ont. Bien que d'être honnête, je n'ai effectué personnellement aucun test de performance. Mais cela vous donne un niveau de contrôle que Maven ne le fait pas.


3 commentaires

Merci pour les conseils Derek. Pour être honnête, je ne sais pas exactement quelles sont les différences, mais à coup sûr Eclipse et Maven ne génèrent pas les mêmes fichiers de classe, je viens de faire une comparaison. Notez également que je ne suis pas directement à l'aide d'un composant Eclipse dans une construction Maven, il s'agit d'un artefact plexus fait pour être utilisé de cette façon. Je suis très bien acceptable des performances maven, mon problème est que lorsque je construit avec Maven, Eclipse reconstruit l'espace de travail. C'est pourquoi je voudrais que je voudrais que Maven Country et Eclipse incrément de construction partagent le même compilateur.


Kool, j'ai vu ce problème. Il est généralement causé par le passage des paramètres de chemin de construction Eclipse à l'aide de cible / de classes et de classes cible / test. Parce que Maven Clean et Maven Compiler manipule ces répertoires, Eclipse voit les modifications et suppose qu'il doit compiler. Un correctif efficace est de ne pas utiliser les mêmes répertoires. Dans Eclipse, vous pouvez également dire à Eclipse d'ignorer / masquer certains répertoires afin de ne pas voir les répertoires cibles de MAVENS.


Avoir une cible distincte pour Eclipse et Maven est ce que j'avais au début. Mais alors cela signifie que je dois compiler deux fois toute modification du code. C'est pourquoi j'ai fusionné la cible Eclipse et Maven Target en premier lieu. D'où ma question.



0
votes

Assurez-vous d'utiliser la dernière version du Maven-compiler-plugin (2.3.2 en ce moment, Voir cette page - c'est" Nom complet "ou les petites informations de la version dans le coin supérieur droit).

En dehors de cela, la configuration devrait fonctionner. Vous pouvez essayer avec la dernière version 1.8.4 du plexus-compiler-eclipse , aussi.

En dehors de cela, vous devez comprendre que Maven a plusieurs types de dépendances. Dans votre cas, deux sont intéressants: dépendances de construction et de plugin.

Les premiers sont collectés dans le dépendances élément tandis que Ce dernier doit être dans un PlugInManagement Elément . L'ajout d'un plugin à l'heure de construction ne sera pas l'effet que vous souhaitez.


0 commentaires

2
votes

Ceci est un ancien problème ouvert lié aux projets Maven Multi Module: http://jira.codehaus.org/browse/mcompiler-165


1 commentaires

Merci, oui, il semble expliquer pourquoi je ne pouvais pas construire un seul module avec le compilateur Eclipse. Cependant, contrairement au problème rapporté, je n'ai pas besoin d'avoir un compilateur différent pour différents modules. Je aurais donc dû pouvoir compiler tout le projet. Malheureusement, cela fait longtemps que j'ai quitté ce projet et je ne peux plus enquêter.