À un niveau de technique, on ne sait plus si ce qu’on fait est utile ou pas. C’est le cas aujourd’hui. Donc cela va parfaitement pour le jinutilitaire.
J’utilise Maven pour organiser mes développements. Pour ces projets, j’utilise plein d’autres projets bibliothèques, des dépendances que j’inscris comme telles dans Maven, dans ce qu’on appelle le pom.xml.
Mais je n’arrive pas à tout faire avec Maven ; pour les déploiements par exemple j’utilise Ant. Il faut que je re-indique alors mes projets bibliothèques. C’est un peu fastidieux.
Il existe (si vous suivez) un autre utilitaire pour indiquer ces dépendances, qui s’appelle Ivy, qui s’associe bien à Maven, mais pour les dependances il faut tout re-écrire C’EST LA BARBE !
J’ai cherché mille choses, posé mille questions sur les forums, rien.
Et j’ai fini par me décider à écrire mon petit utilitaire (cela faisait longtemps), pour transformer automatiquement (ou presque) le jargon maven en jargon ivy, à partir du code source de Maven lui même et son javadoc.
Et l’étonnement m’a pris, cela est quasi-facile !
Voici le programme qui m’affiche les dependencies d’un pom.xml en deux coups de cuillère à pot (quasi mieux que Maven lui même, d’ailleurs) :
package jinutilitaire.lecoinmaven; import java.io.FileReader; import java.util.List; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; public class Coin { public static void main(String[] args) throws Exception { MavenXpp3Reader xppread; Model model; List dependencies; xppread = new MavenXpp3Reader(); model = xppread.read(new FileReader("/ici/le/path/pour/le/pom.xml")); dependencies = model.getDependencies(); for (Object o : dependencies) { Dependency dep; dep = (Dependency)o; System.out.printf( "%n", dep.getGroupId(), dep.getArtifactId(), dep.getVersion()); } } }
Hahurissant ! 3 lignes de code ! Dans l’univers d’aujourd’hui c’est exceptionnel ! En plus le code de Maven semble super bien conçu, facile à comprendre, bien qu’il n’y ait pas beaucoup de doc… donc un Bon Point Pour Maven.
Pour que ça marche inclure le $MAVEN_HOME/lib/maven-2.0.9-uber.jar dans le classpath.