- 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
end
Rien 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.










