- #!/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 =~ "<packaging>pom</packaging>" ]]; then
- echo "$package: Handling as a BOM"
- pom=${response//<dependencyManagement>/}
- pom=${pom//<\/dependencyManagement>/}
- else
- stripped=$(echo $response | grep -Po "<dependencyManagement>\s*<dependencies>\K.*(?= </dependencies>\s</dependencyManagement>)")
- stripped=$(echo $stripped | sed "s/<!--.*-->//g")
- deps=$(echo $stripped | sed "s/<dependency>\s*<groupId>\([^<]*\)<\/groupId>\s*<artifactId>\([^<]*\)<\/artifactId>\s*<version>\([^<]*\)<\/version>.*<\/dependency>/\1:\2:\3/g")
-
- pom=$(cat << DOC
- <?xml version="1.0" encoding="UTF-8"?>
- <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <groupId>tmp.$group</groupId>
- <artifactId>placeholder-$artifact</artifactId>
- <version>$version</version>
- <packaging>pom</packaging>
- <name>Package $artifact</name>
- <dependencies>
- <dependency>
- <groupId>$group</groupId>
- <artifactId>$artifact</artifactId>
- <version>$version</version>
- </dependency>
- </dependencies>
- </project>
- 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
|