Affichage des articles dont le libellé est Maven. Afficher tous les articles
Affichage des articles dont le libellé est Maven. Afficher tous les articles

mardi 14 février 2017

Chemin de Maven dependency tree à Neo4j

     Histoire de jouer un peu avec la techno, l'objet de ma recherche était de trouver le chemin le plus pour passer de l'output Maven dependency:tree à un joli graph Neo4j (en version 3.0.6).

     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")
     Commande d'import (dans ma console) :
 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

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)



dimanche 16 mars 2014

Maven en quelques urls

     Ce billet pour donner quelques urls utiles quand on utilise Maven. Je ne détaillerais pas tout ce que permet de faire cet outil car c'est vaste et les nombreux posts, livres à ce sujet le font déjà très bien.

     Pour commencer forcément : http://maven.apache.org/

La dernière version est actuellement Maven 3.2.1
L'historique des versions est disponible sous http://maven.apache.org/docs/history.html

Maven c'est quoi


Maven dans les grandes lignes c'est (http://maven.apache.org/what-is-maven.html) :
  • un outil pour "builder" les projets Java avec un cylcle de vie  bien défini.
  • un outil qui permet de gérer les dépendances aux librairies externes.
  • un outil qui peut distribuer/versionner les librairies Java via les systèmes de repository (local, intranet, internet).
 Un peu d'histoire sur Maven et sa philosophie.

Les solutions alternatives


     Les premières alternatives plus rudimentaires sont le scripting (sh, bat, ...) ou le make. En dehors de ces dernières il existe principalement trois autres solutions plus évoluées

Ant : http://ant.apache.org/
L'un des premiers à avoir permis de scripter des builds de projets Java en standardisant des tasks.

Ant et Ivy : https://ant.apache.org/ivy/
Ivy pour une gestion de dépendances dite agile qui est devenu officiellement un sous projet de Ant en 2007 (Mail de passage à l'incubator) permettant ainsi une complémentarité de ces deux projets.

Gradle : http://www.gradle.org/
Solution open source dont la communauté est drivé par GradleWare. Le code est disponible sous GitHub.

Gradle, Ivy et Maven via des plugins peuvent s'intégrer dans les différentes EDI (Eclipse, NetBeans, IntelliJ)

Maven c'est aussi un outil en ligne de commande


     Maven un outil en ligne de commande qui s'étend par système de plugin. Il en existe de très nombreux maintenus par Apache Maven ou d'autre organisations.

     Ces plugins permettent d'apporter de nouvelles fonctionnalités (déploiement sur des serveurs applicatifs, visualisation de dépendances, couverture de code par les tests unitaires, ...) ou peuvent faciliter l'intégration dans d'autres outils comme les serveurs d'intégration continu tel Jenkins.

Quelques plugins : http://maven.apache.org/plugins/index.html

En plus des plugins existant chacun peut développer les siens, adaptés à ses besoins

Maven : un repository et un outil de gestion de dépendances

 

     Les repository Maven sont les emplacements où sont distribuées/récupérées les librairies nécessaires aux builds de vos projets. On a un repository local sur le poste sur lequel on travail mais (fonction de la configuration utilisée) on peut être en interaction avec un repository Maven central, un repository d'entreprise, un repository d'éditeur (par exemple JBoss).

Les principaux repository Maven officiels : http://maven.apache.org/repository/index.html

Les outils permettant de faciliter la gestion des repository :
Une matrice de comparaison de leurs features : http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Feature+Matrix

 Rechercher une librairie sur un repository Maven central :
http://repo.maven.apache.org/maven2/
http://search.maven.org/#browse

Comment faire lorsque l'on est développeur et que l'on souhaite voir son framework publié sur un repo centrale Maven : http://lkrnac.net/blog/2014/03/06/deploy-to-maven-central/

Quelques ressources sur Maven