Premier constat pas de solution directe remontée par google sur des personnes ayant eu la même problématique. Du coup plusieurs approches possibles :
Je code
- je recode vraiment tout, je récupère un output de mvn dependency tree (Plugin Maven dependency tree) et je parse le resultat (sorti console ou output spécifié au plugin) dans mon langage favori. Une fois que j'ai mon modèle objet je le parcours et l'insère dans Neo4j
- Si Maven dependency peut me sortir un ascii art, c'est du code Java autant réutiliser son tree model
- Je parcours le web et vois ce qui peut m'aider : Aether (https://wiki.eclipse.org/Aether/Transitive_Dependency_Resolution)
Ou maximum de reuse
Par soucis d'efficacité pour un besoin plus de l'ordre du tooling je vois ce que je peux faire sans avoir à coder.
Export côté Maven
Plutôt que réutilisé la sortie console j'utilise le plugin et spécifie on output. Tiens je peux produire du Graphml :"mvn dependency:tree -DoutputType=graphml -DoutputFile=dependency.graphml" (et si besoin j'utilise les -Dincludes et excludes qui vont bien)
A partir de là j'ai mes dépendances dans un fichier Graphml.
Import côté Neo4j
Je lance ma console Neo4j (url disponible sous http://localhost:7474/)
- Voir le résultat de mon import : MATCH (n) RETURN n;
- Tout effacer pour recommencer : MATCH (n), ()-[r]-() DELETE n,r
- Ou encore pour partir d'une base vide avant de lancer ma base effacer le contenu de \data\databases\
Import via neo4j-shell
Je lance mon shell (sous bin) et tape la ligne de commande qui va bien :
neo4j-sh (?)$ import-graphml -i "file:///c:/My/LocalPath/toMyFile/dependency.graphml" -r DEPENDS_ON -t
Je retourne dans ma console et visualise le graph. Problème malgré l'option -t je perd mes labels et propriétés .... après avoir creusé pas de pistes sérieuses, peut être problème de format du graphml.
Import via APOC
Je tente ma chance, récupération d'APOC
- download : https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/tag/3.0.4.2
- je le place dans le répertoire plugin de mon Neo4j
- je modifie ma configuration neo4j pour ajouter les 2 propriétées suivante
- apoc.export.file.enabled=true
- apoc.import.file.enabled=true
- je démarre mon neo4j et teste : call apoc.help("apoc")
CALL apoc.import.graphml("file:///c:/My/LocalPath/toMyFile/dependency.graphml", {batchSize: 10000, readLabels: true, storeNodeIds: true, defaultRelationshipType:"DEPENDSON"});
Cela ne marche pas mieux ... Je tente un export de graph histoire de voir le format (call apoc.export.graphml.all("test",{}) me génère un fichier graphml a la racine de ma base neo4j)
On fait quoi ....
Je reste sur ma ligne on a dit sans code ....
Du coup 3e voie je passe par jEd (https://www.yworks.com/downloads#yEd) pour visualiser mon graph. A voir aussi Gephi (https://gephi.org/)
Quelques commandes de mise en forme :
- Open Document -> dependency.graphml > OK.
- Tools > Fit Note to Label … > OK
- Layout > Hierarchical > Orientation > Left to Right > OK
Quand j'aurais le temps de coder
Je continu à explorer
- neo4j-shell (https://github.com/jexp/neo4j-shell-tools#graphml-import)
- APOC
- Maven dependency plugin (ses tests unitaires sont un bon point d'entré)
- Aether
- https://github.com/finn-no/maven-dependency-mapper
- https://github.com/jcaddel/graph-maven-plugin
Conclusion
J'ai un résultat visualisation de mon graph mais pas dans l'outil souhaité. Ce n'est que partie remise et compte bien retourner sur Neo4j qui fait quand même des choses sympa (https://gist.github.com/jexp/90f590ad1d125284bc35223c86bebd33)
Aucun commentaire:
Enregistrer un commentaire