Question

Quelles sont les possibilités pour appliquer des restrictions sur les dépendances de packages dans un système de construction Java? Par exemple, la classe myapp.server.bl.Customer ne doit pas être autorisée à faire référence au package myapp.client.ui.customlayout . Je m'intéresse aux solutions basées sur Ant ou spécifiques à IDE.

Je souhaite recevoir un message d'erreur dans la construction indiquant qu'une règle de dépendance (personnalisée) du package a été violée et que la construction a été abandonnée. Je souhaite également conserver les dépendances dans une liste, de préférence dans un fichier texte, en dehors des scripts Ant ou des fichiers de projet IDE.

(Je ne connais pas Maven, mais je l'ai lu ici. Il prend mieux en charge la gestion de la dépendance des modules.)

Était-ce utile?

La solution

Je pense que Checkstyle a un chèque pour cela. C'est ce qu'on appelle Contrôle des importations

.

Autres conseils

Vous pouvez configurer les projets Eclipse pour spécifier des règles d'accès. Les règles d'accès peuvent spécifier "Interdit", "Déconseillé" et "Accessible". niveaux tous avec des règles génériques. Vous pouvez ensuite configurer les violations de Discouraged ou Interdit pour être marquées comme des avertissements ou des erreurs lors des générations.

Sorte d'ancien article sur l'idée (les détails peuvent être périmés):

http://www.eclipsezone.com/eclipse/forums/t53736.html

Si vous utilisez des plugins Eclipse (ou OSGi), le fichier "public" des parties du plugin / module sont explicitement définies et font partie du modèle.

ivy semble être une bonne solution à votre problème (si vous utilisez ant). Ivy est le composant de gestion de dépendance officiel de Ant et s'intègre ainsi parfaitement à ant. Il est capable de résoudre les dépendances, de gérer les conflits, de créer des exclusions, etc.

.

Il utilise une structure xml simple pour décrire les dépendances et est plus facile à utiliser que Maven, car il tente uniquement de résoudre les problèmes de résolution des dépendances.

Depuis la page d'accueil Ivy:

Ivy est un outil de gestion (enregistrement, suivi, résolution et rapport) des dépendances de projet. Il se caractérise par les éléments suivants:

  1. flexibilité et configurabilité - Ivy est essentiellement agnostique par rapport aux processus et n’est lié à aucune méthodologie ou structure. Au lieu de cela, il fournit la flexibilité et la configurabilité nécessaires pour être adaptés à un large éventail de processus de gestion de la dépendance et de construction.
  2. intégration étroite avec Apache Ant - bien qu’il soit disponible en tant qu’outil autonome, Ivy fonctionne particulièrement bien avec Apache Ant, qui fournit un certain nombre de tâches Ant puissantes, allant de la résolution des dépendances aux rapports sur les dépendances et à la publication.

Pour les solutions spécifiques à l'EDI, IntelliJ IDEA dispose d'un outil d'analyse des dépendances qui permet également de définir des dépendances non valides. http://www.jetbrains.com/idea/webhelp2/dependency- validation-dialog.html

La violation de dépendance sera affichée lors de la compilation et de la vie, lors de la modification de la classe dépendante (sous forme de bandes d'erreur / d'avertissement dans la barre d'erreur de droite).

Encore plus d'automatisation peut être obtenue avec le serveur de génération TeamCity de JetBrains, qui peut exécuter des versions d'inspection et rapporter les vérifications configurées ci-dessus.

Pour une autre solution indépendante de l'EDI, AspectJ peut être utilisé pour déclarer des dépendances non valides (et intégrer l'étape dans le processus de construction, afin d'obtenir des informations d'avertissement / d'erreur pour les problèmes).

Eclipse est pris en charge à cet effet via les propriétés du chemin de construction / propriétés du fichier jar. Je pense que cela ne peut fonctionner que par-delà les limites du pot / du projet.

Peut-être que Classsycle peut être utilisé: http://classycle.sourceforge.net/ddf.html

Vous pouvez utiliser plusieurs modules dans IDEA ou Maven ou plusieurs projets dans Eclipse et Gradle. Le concept est le même dans tous les cas.

Une interprétation triviale serait un module pour myapp.server.bl et un autre pour myapp.client.ui.customlayout sans dépendance de temps de compilation entre eux. Désormais, toute tentative de compilation de code ou de code complet avec le module / projet opposé échouera comme souhaité.

Pour vérifier l'étendue du problème, un point de départ utile pour IntelliJ IDEA est Analyse des dépendances :

.

http://www.jetbrains.com/idea/webhelp/analyzing -dependencies.html

À partir de cet article, vous pouvez voir comment exécuter et appliquer une analyse de dépendance à votre projet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top