#!/bin/bash baseurl="https://search.maven.org" response="" status="" downloaded="" get_url(){ response=$(curl -s --write-out "%{http_code}\n" "$1") status=${response: -3} response=${response:0:-3} } count_char_occurrences(){ string=$1 stripped=${string//[^$2]} return ${#stripped} } handle_dep(){ package=$1 count_char_occurrences "$package" : numcolon=$? if [[ $numcolon -eq 1 ]]; then group=${package%%:*} artifact=${package##*:} version="" elif [[ $numcolon -eq 2 ]]; then group=${package%%:*} version=${package##*:} tmp=${package#*:} artifact=${tmp%%:*} else echo "$package: Invalid format. It should be 'groupID:artifactID' or 'groupID:artifactID:version'" return fi if [[ $version =~ '$' ]]; then echo "$package: This script does not have support for pom variables yet. Using latest version instead" version="" fi if [[ -z $version ]]; then echo "$package: Finding latest version" url="$baseurl/solrsearch/select?q=g:$group+AND+a:$artifact&rows=1&wt=json" get_url "$url" if [[ $status -ne 200 ]]; then echo "$package: Error $status from the Maven API. Please check that the package name is correct." return fi version=$(echo "$response" | sed "s/^.*\"latestVersion\":\"\([^\"]*\)\".*$/\1/") fi if [[ $downloaded =~ "$group:$artifact:$version" ]]; then echo "$package: Already downloaded" return fi echo "$package: Downloading pom for version $version" grouppath=${group//.//} urlpath="$grouppath/$artifact/$version/$artifact-$version.pom" url="$baseurl/remotecontent?filepath=$urlpath" get_url "$url" if [[ "$status" -ne 200 ]]; then echo "$package: Error $status from the Maven API. There's probably a bug in the code." return fi if [[ $response =~ "pom" ]]; then echo "$package: Handling as a BOM" pom=${response///} pom=${pom//<\/dependencyManagement>/} else stripped=$(echo $response | grep -Po "\s*\K.*(?= \s)") stripped=$(echo $stripped | sed "s///g") deps=$(echo $stripped | sed "s/\s*\([^<]*\)<\/groupId>\s*\([^<]*\)<\/artifactId>\s*\([^<]*\)<\/version>.*<\/dependency>/\1:\2:\3/g") pom=$(cat << DOC 4.0.0 tmp.$group placeholder-$artifact $version pom Package $artifact $group $artifact $version DOC ) fi destdir="$(pwd)/poms/$group:$artifact:$version" mkdir -p "$destdir" echo "$pom" > "$destdir/pom.xml" downloaded="$downloaded $group:$artifact:$version" for dep in $deps; do echo "$package: Downloading transitive dependency $dep" handle_dep $dep done } while read line; do handle_dep $line done < "package-list.txt" sh generate_master_pom.sh