- long
- barbant
- peu fiable : j'ai déjà vu des JAR "patchés" ou "complétés" avec des classes annexes
Une solution plus propre consiste à se baser sur les empruntes MD5 et SHA1 que le repository Maven conservent pour chaque artefact. Une simple recherche Google sur cette clé retourne l'identification précise d'une bibliothèque (avec parfois des surprises !).
Il y a pourtant encore plus simple...
Le repository manager Nexus propose un moteur de recherche qui prend en entrée l'emprunte SHA1. Basé sur son index interne, il va nous retrouver la bibliothèque, et en plus nous indiquer les versions plus récentes (si on veut en profiter pour un petit lifting). L'avantage de Nexus, c'est qu'il propose une API REST qui permet d'automatiser tout ça. Allons-y donc gaillardement !
J'écrit donc mon tout premier script Ruby ! - et oui, tout fout le camp ma bonne dame - ce langage est génial pour écrire des scripts de ce type, avec des bibliothèques bien puissantes ;)
require 'find' require 'digest/sha1' require 'net/http' require 'rexml/document' include REXML for file in Dir.glob("*.jar") do sha = Digest::SHA1.file( file ).hexdigest url = "http://myNexus/service/local/lucene/search?sha1=" + sha resp = Net::HTTP.get_response( URI.parse( url ) ) puts File.basename( file ) + " (" + sha + ") = \n"; doc = REXML::Document.new( resp.body ) XPath.each( doc, "//artifact" ) do |r| puts "<dependency>" puts " <groupId>#{r.elements["groupId"].text}</groupId>" puts " <artifactId>#{r.elements["artifactId"].text}</artifactId>" puts " <version>#{r.elements["version"].text}</version>" puts "</dependency>" end endRien de bien méchant, comme vous pouvez le constater, et ce script permet d'analyser rapidement une liste de jar en proposant les éléments
Maintenant que Maven Indexer est un projet Apache (depuis la version 3.1.0), ce serait bien d'intégrer cette fonctionnalité au plugin dependency [MDEP-269] ... ou ailleurs.