Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    11.2. Programmation Maven

    La plus grande partie de cet ouvrage a été dédié à l'utilisation de Maven, de ce fait, vous n'avez pas vu beaucoup d'exemples de code portant sur la personnalisation de Maven. En fait, vous n'en avez pas vu du tout. Maven a été pensé pour que 99% de ses utilisateurs n'aient jamais besoin d'écrire le moindre plugin pour personnaliser Maven. En effet, il existe de nombre de plugins et ceux-ci peuvent être configurés pour répondre à la grande majorité des cas, vous n'aurez donc probablement pas besoin d'écrire de plugins. Cela dit, si votre projet comporte des demandes très spécifiques qui vous obligent à personnaliser le comportement de Maven, vous pouvez alors vous lancer dans la création d'un plugin. Modifier le code du cœur de Maven est considéré comme hors de leur portée par la plupart des développeurs, comme s'il s'agissait de modifier la pile TCP/IP d'un système d'exploitation.

    Avant de commencer à écrire votre plugin, vous devez en apprendre un peu plus sur les entrailles de Maven : Comment gère t-il les composants logiciels ? Qu'est-ce qu'un plugin ? Comment puis-je personnaliser un cycle de vie ? Cette section répond à certaines de ces questions et introduit les concepts clés du cœur de Maven. Apprendre à écrire un plugin Maven est le moyen le plus simple de personnaliser Maven. Si vous vous demandiez par où démarrer pour comprendre le code de Maven, vous avez trouvé le bon point de départ.

    11.2.1. Qu'est ce que l'inversion de contrôle ?

    Le cœur de Maven est basé sur un conteneur d'inversion de contrôle (IoC) nommé Plexus. Que fait-il ? Il s'agit d'un système de gestion des relations entre composants. Bien qu'il existe un livre dédié sur l'IoC écrit par Martin Fowler, le concept et le terme ont été si souvent utilisés à bon et à mauvais escient ces dernières années qu'il devient difficile de trouver une bonne définition de cette notion sans que s'agisse d'une auto-référence. Au lieu de recourir à une citation Wikipédia, nous allons résumer l'inversion de contrôle et l'injection de dépendances par l'intermédiaire d'une analogie.

    Supposons que vous devez connecter une série de composants hi-fi ensemble. Imaginez donc plusieurs composants stéréo branchés à une Playstation 3 et un TiVo qui doivent s'interfacer à la fois avec un boîtier Apple TV et à une télévision LCD 50 pouces. Vous venez de ramener tout ce matériel d'un magasin d'électronique à la maison et vous avez acheté les câbles pour connecter tout cela. Vous déballez donc l'ensemble de ces éléments, vous les installez chacun à leur place, puis vous commencez à brancher les milliers de câbles coaxiaux et de prises stéréo aux milliers d'entrées numériques et analogiques. Éloignez-vous de votre Home cinéma et allumez la télé, vous venez de réaliser de l'injection de dépendances, et vous étiez vous-même un conteneur d'inversion de contrôle.

    Quel est le rapport avec tout ça ? Transposons cette analogie en Java. Votre Playstation 3 comme votre Java Bean fournissent tous les deux une interface. La Playstation 3 à deux entrées : l'alimentation et la prise réseau, et une sortie vers la TV. Votre Java Bean possède trois propriétés : power, network et tvOutput. Quand vous ouvrez la boîte de votre Playstation 3, le manuel ne vous décrit pas en détail comment la connecter à tous les types de téléviseurs. De même, votre bean Java fournit une liste de propriétés sans pour autant vous donner une recette explicite pour créer et gérer un système complet de composants. Dans un conteneur d'IoC tel que Plexus, il vous incombe de déclarer les relations dans un ensemble de composants qui fournit une interface d'entrée et de sortie. Vous n'instanciez pas d'objets, Plexus s'en charge. Le code de votre application n'est pas responsable de la gestion des états des composants, c'est le rôle de Plexus. Lorsque vous démarrez Maven, Plexus est démarré pour gérer un système d'éléments connexes, comme votre système stéréo.

    Quels sont les avantages apportés par l'utilisation d'un conteneur IoC ? Quel est l'avantage d'acheter des composants stéréo distincts ? Si l'un des composants se casse, vous pouvez le remplacer sans avoir à dépenser les 15 000 € nécessaires pour remplacer l'ensemble de votre système. Si votre téléviseur vous lâche, vous pouvez le remplacer sans que cela n'affecte le lecteur CD. Et le plus important pour vous, les composants de votre chaîne hi-fi coûtent moins chers et sont plus fiables car les fabricants peuvent se contenter de construire des composants en s'appuyant un ensemble d'entrées et de sorties connues. Les conteneurs d'inversion de contrôle et d'injection de dépendances encouragent donc la catégorisation et l'émergence de standards. L'industrie du logiciel aime s'imaginer comme source de toutes les nouvelles idées, mais l'injection de dépendances et l'inversion de contrôle ne sont réellement que de nouveaux mots pour définir des concepts bien connus : la standardisation et l'interchangabilité des apppareils. Si vous voulez en savoir plus sur l'IoC et l'injection de dépendances, vous pouvez vous renseigner sur la Ford T, le Cotton Gin ou l'émergence d'un standard pour le chemin de fer au 19ème siècle.