Comment obtenir l'accès à Maven de la dépendance de la hiérarchie au sein d'un plugin
Dans mon plugin j'ai besoin de traiter la dépendance à la hiérarchie et à obtenir des informations (groupId, artifactId, la version, etc) sur chaque dépendance et si il a été exclu. Quelle est la meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
La dépendance plugin a la arbre but qui réalise la plupart de ce travail. Il traite une
MavenProject
à l'aide de laDependencyTreeBuilder
, cela renvoie uneDependencyNode
avec hiérarchique de l'information au sujet de l'résolu dépendances (et leurs dépendances transitives).Vous pouvez copier une grande partie du code directement à partir de la TreeMojo. Il utilise le
CollectingDependencyNodeVisitor
pour parcourir l'arbre et de produire unList
de tous les noeuds.Vous pouvez accéder à la
Artifact
pour le nœud en appelantgetArtifact()
, puis obtenir l'objet d'informations que nécessaire. Pour obtenir l'exclusion de la raison,DependencyNode
a ungetState()
méthode qui renvoie un entier indiquant si la dépendance a été compris, ou sinon quelle est la raison de l'omission qu'il a été (il y a des constantes dans la DependencyNode classe pour vérifier la valeur de retour contre)Vous pouvez utiliser MavenProject#getDependencyArtifacts() ou MavenProject#getDependencies() (le plus tard, on revient également des dépendances transitives).
Je ne suis pas totalement sûr, mais je pense que les deux méthodes retournent une collection de Artefact implémentations qui exposent les getters pour groupId, artifactId, version, etc.
getDependencies()
ne retourne pas transitive depsgetArtifacts
méthode qui permet de récupérer toutes les dépendances objets dont transitive ceux. LegetDependencyArtifacts
méthode est obsolète.Ici est une mise à jour, Maven3 exemple sur la façon d'obtenir toutes les dépendances (y compris transitive) et d'avoir accès aux fichiers eux-mêmes (si vous avez par exemple besoin d'ajouter les chemins d'accès à un chemin de classe).
Modifié les paramètres dans le Mojo est un élément très important qu'il me manquait. Sans elle, les lignes comme suit:
Retourne uniquement le répertoire classes, et non pas le chemin que vous attendez.
La modification de la requiresDependencyCollection et requiresDependencyResolution à différentes valeurs vous permettra de modifier la portée de ce que vous voulez prendre. Le maven de la documentation peut fournir plus de détails.
Essayez d'utiliser
Ether
classe utilitaire de jcabi-aether pour obtenir une liste de toutes les dépendances de tout artefact:Pourquoi ne pas juste en arrière de toutes les dépendances (à la fois directs et transitifs) et vérifier l'exclusion?
Maven 3 utilisation de l'éther, il y a un exemple ici :
https://docs.sonatype.org/display/AETHER/Home
Pour Maven 3, vous pouvez utiliser DependencyGraphBuilder. Il fait à peu près la même chose que DependencyTreeBuilder.
Voici l'exemple