La migration de projet du complexe de la Fourmi à Maven - Comment gérer les dossier inhabituelle structures?
Dans mon nouveau projet, je suis confronté à une infrastructure complexe avec plusieurs modules qui ont grandi au fil des ans dans une déplaisante, de façon incontrôlée.
À venir au point: Le processus de construction est l'horreur. Il y a plus de 40 différents, complexes Ant fichiers, qui sont reliés à plusieurs reprises et l'architecture SOA génère également plusieurs dynamiques des fichiers Ant. Il a fallu quelques jours pour vraiment comprendre toutes les dépendances et à construire, finalement, l'ensemble du projet sans erreurs.
Mon plan était de migrer l'ensemble du projet de Fourmi à Maven, depuis les nouveaux composants sont prévues et je voudrais éviter ces problèmes à l'avenir et le bien, parce que c'est juste horrible la façon dont elle est maintenant 😉
Depuis que je suis de nouveau à la migration de plus gros projets, je suis un peu confus au sujet de la meilleur flux de travail. Il y a des dizaines de fichiers XML et les scripts impliqués, qui sont distribués dans un non-Maven structure de répertoire. Globalement, il existe plus de 3000 fichiers concernés. L'un des principaux problèmes est que je ne sais pas si je devrais vraiment essayer de tout migrer dans le connu Maven structure de répertoire, et donc le risque d'interminables d'édition et refactoring de chaque fichier. Ou dois-je conserver la structure du dossier tel qu'il est et le ballonnement de mon pom.xml fichiers et éventuellement rencontrer des problèmes avec tous les différents impliqués plugins? Honnêtement, les deux moyens ne sonnent pas tout à fait constructive.
T-il même un sens à la migration d'un projet de cette dimension à Maven? Surtout quand l'architecture SOA doit utiliser ses propres fichiers Ant - donc une combinaison de Ant et Maven serait nécessaire. Quelle serait la meilleure stratégie pour simplifier ce processus?
Merci pour toutes les suggestions.
- "Est-il encore un sens pour migrer un projet de cette dimension à Maven?" Dépend de ce que votre but est. En général, j'aurais tendance à "non", et ce surtout à cause de l'horreur de la "généré dynamiquement des fichiers Ant". Je n'aurais plus jamais démarrer un tel projet à l'aide de Ant - mais la conversion d'un projet existant, c'est une autre tasse de thé.
- stackoverflow.com/questions/8465656/...
Vous devez vous connecter pour publier un commentaire.
Voici un moyen simple et rapide de répondre à Mavenizing une Fourmi projet:
NE PAS LE FAIRE!
Ce n'est pas un anti-Maven de la chape. J'utilise Maven, et j'aime Maven. Il oblige les développeurs à ne pas faire des choses stupides. Les développeurs sont terribles à l'écriture de scripts. Ils veulent faire les choses de cette façon et pas comme tout le monde le fait. Maven permet aux développeurs d'installation de leurs projets de façon à ce que chacun peut comprendre.
Le problème est que la Fourmi permet aux développeurs de faire sauvages et folles choses que vous avez à refaire complètement dans Maven. Il est plus que juste la structure de répertoire. Ant permet de construire plusieurs artefacts. Maven permet seulement un par
pom.xml
1. Que faire si votre projet Ant produit une demi-douzaine de différents fichiers jar-et que les fichiers jar contiennent la plupart des classes? Vous aurez à créer une demi-douzaine de projets Maven juste pour les pots, puis une autre demi-douzaine pour les fichiers qui sont en commun entre les pots.Je le sais parce que j'ai fait exactement cela. Le chef de l'Architecture du Système a décidé que Maven est un nouveau et bon, tandis que la Fourmi doit être mauvais et méchants. Il n'avait pas d'importance que les versions travaillé et ont été bien structuré. Non, Fourmi doit aller, et Maven est le chemin.
Les développeurs ne veulent pas le faire, de sorte qu'il est tombé pour moi, le CM. J'ai passé six mois à la réécriture de tout dans Maven. Nous avons eu WSLD, nous avons eu Hibernate, nous avons eu différents cadres, et d'une certaine manière, j'ai dû restructurer tout pour le faire fonctionner dans Maven. J'ai eu de frayer de nouveaux projets. J'ai dû déplacer des répertoires. J'ai dû trouver de nouvelles façons de faire les choses, le tout sans s'arrêter aux développeurs de faire des quantités massives de développement.
C'était l'intérieur de la plupart cercle de l'Enfer.
Une des raisons pour lesquelles votre Ant projets sont tellement complexes a probablement à voir avec la gestion de la dépendance. Si vous êtes comme la notre magasin en cours, un développeur a décidé de
hack ensembledévelopper leur propre système de gestion de la dépendance. Après avoir vu cette dépendance du système de gestion, je sais, maintenant, deux choses que les développeurs ne devrait jamais écrire: Leurs propres fichiers de build, et de la dépendance des systèmes de gestion.Heureusement, il existe déjà un système de gestion de la dépendance pour Ant appelé Ivy. La bonne chose à propos de Lierre est qu'il fonctionne avec le courant Maven architecture. Vous pouvez utiliser votre site centralisé repository Maven, et le Lierre peut déployer des pots de pour qui référentiel Maven artefacts.
J'ai créé un Lierre projet qui automatiquement l'installation de tout pour les développeurs. Il contenait le nécessaire d'installation et de configuration, et quelques macros qui pourrait remplacer un peu de la norme des tâches Ant. J'ai utilisé
svn:externals
pour joindre le Lierre de projet pour le projet principal.L'ajout de ce projet dans la version actuelle du système n'est pas trop difficile:
build.xml
pour intégrer notreivy.dir
projet dans le projet actuel.ivy.xml
fichier pour ce projet.<jar
et</jar>
à<jar.macro
et</jar.macro>
. Cette macro a tout fait la norme<jar/>
tâche ont fait, mais il a également intégré lapom.xml
dans le pot comme Maven construit le faire. (Le lierre a une tâche pour la conversion de laivy.xml
fichier dans unpom.xml
).build.xml
fichier en une centaine de lignes. J'ai aussi arraché tous les trucs qui n'ont extractions et s'engage, ou via le ftp ou scp avais des trucs dessus. Toutes ces choses étaient pour leur Jenkins système de build, mais Jenkins pouvez gérer cela sans aucune aide des fichiers de build, je vous remercie.lib
répertoire, et puis il suffit de les télécharger viaivy.xml
. Tous ensemble, il peut prendre une dizaine de lignes de code à ajouter ou à modifier dans labuild.xml
pour ce faire.Je suis arrivé au point où je pouvais intégrer le Lierre dans un projet en quelques heures -- si le processus de construction lui-même n'était pas trop foiré. Si j'avais à réécrire l'build.xml à partir de zéro, il pourrait me prendre deux ou trois jours.
À l'aide de Lierre de nettoyer notre Fourmi processus de construction et nous a permis de nombreux avantages que nous aurions à Maven, sans avoir à prendre une restructuration complète.
Par le moyen, l'outil le plus utile pour ce processus est Au-Delà De Comparer. Cela m'a permis de vérifier rapidement que le nouveau processus de construction a été compatible avec l'ancienne.
De passer à Maven de toute façon...
Le plus drôle, c'est qu'une fois que vous avez intégré votre Ant projets de Lierre, de les transformer en projets Maven n'est pas si difficile:
build.xml
. Vous pourriez avoir à le réécrire à partir de zéro, mais sans plus de la gestion de la dépendance des ordures, ce n'est pas tout ce que difficile.build.xml
est nettoyé, commencer à déplacer les répertoires jusqu'à ce qu'ils correspondent à Maven de la structure.pom.xml
et supprimer lesbuild.xml
.1 Oui, je sais que ce n'est pas tout à fait vrai. Il y a des projets Maven avec des sous-projets et super poms. Mais, vous n'aurez jamais un projet Maven qui s'appuie sur quatre différentes sans lien pots alors que c'est assez fréquent chez Ant.
J'ai fait une similaire de la migration dans le passé, et j'ai eu les mêmes doutes que vous aviez; cependant, je suis allé pour la "conserver la structure de dossier et de spécifier les chemins d'accès dans le POM de fichiers", et j'ai remarqué qu'il n'était pas aussi mauvais que je le pensais.
Ce que j'avais à faire était de correctement définir le
<sourceDirectory>
et la<outputDirectory>
et peut-être ajouter quelques inclusion et d'exclusion des filtres, mais à la fin, je dirais que même si Maven est vraiment plus de convention de configuration-ish et rend votre vie plus facile si vous suivez ses directives sur l'endroit où placer les fichiers, il n'a pas vraiment le faire beaucoup plus difficile si vous ne le faites pas.En outre, quelque chose qui m'a vraiment aidé lors de la migration a été la possibilité de diviser le projet Maven dans des modules, qui au départ, j'ai utilisé pour reproduire la Fourmi de la structure (c'est à dire j'ai eu un Maven pour chaque module build.xml fichier) la prise de la première étape de la migration de plus simple, et puis j'ai changé le module d'agrégation de le rendre plus significatif et de plus en plus de type Maven.
Pas sûr si cela ne fait aucun sens pour vous, puisque je n'ai pas généré Ant les fichiers dont j'ai recon peut-être le plus gros problème pour vous, mais je voudrais certainement suivre cette route au lieu de refactoring et de déplacer les fichiers de partout à Mavenize mon projet de la structure.