#!/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