Tasked with converting a project to Maven, I needed to find out the version of the dependencies, as not all of them had the version in the name.
Looking Up a Single Jar
If it’s a single jar you want to look up, it’s quite easy. Simply take the sha1 hash of the file, head over to the Maven Central Advanced Search, and put the hash in the “SHA-1 Checksum” field.
Looking Up Many Jars
The above becomes very tedious very quick if you have dozens of jars to lookup. A whole directory of mysterious dependencies.
Maven Central has a search API that I quickly took advantage of to automate the above process in Python. I created a script that will, for every file in a given path, hash the file and search for its version.
You simply run it as >jar_version.py <path>
Feel free to use the script.
import sys import urllib2 import json import os def sha1_of_file(file_path): import hashlib with open(file_path, 'rb') as f: return hashlib.sha1(f.read()).hexdigest() def search_maven_central(sha1_hash): maven_hash_url = "http://search.maven.org/solrsearch/select?q=1:%22" + sha1_hash + "%22&rows=20&wt=json" response = urllib2.urlopen(maven_hash_url) return response.read() def pull_result_version_from_results(maven_central_response): results_parsed = json.loads(maven_central_response) if results_parsed["response"]["numFound"] == 0: return "Not Found" else: specific_results = results_parsed["response"]["docs"] return specific_results["g"] + " " + specific_results["a"] + " v" + specific_results["v"] def process_artifact(artifact_path): sha1_hash = sha1_of_file(artifact_path) html = search_maven_central(sha1_hash) result_value = pull_result_version_from_results(html) print artifact_path + " -> " + result_value def main(): path = sys.argv if os.path.isfile(path): process_artifact(path) else: for root, _, files in os.walk(path): for f in files: full_path = os.path.join(root, f) process_artifact(full_path) main()