set -e
destRepo="$(cd $(dirname $0)/../.. && pwd)"
tempDir="/tmp/import-temp-work"
rm -rf $tempDir
mkdir -p $tempDir
cd $tempDir
function usage() {
echo "Usage: $0 group:artifact:version[:classifier][@extension] [group:artifact:version[:classifier][@extension]...]
This script downloads the specified artifacts copies them into the appropriate subdirectory of $destRepo/prebuilts/"
exit 1
}
inputRepo=m2repository
stageRepo=m2staged
destAndroidRepo=$destRepo/prebuilts/gradle-plugin
destThirdPartyRepo=$destRepo/prebuilts/tools/common/m2/repository
# usage: downloadArtifacts "$group:$artifact:$version[:classifier][@extension]..."
function downloadArtifacts() {
if [ "$1" == "" ]; then
usage
fi
echo downloading dependencies into $inputRepo
rm -rf $inputRepo
while [ "$1" != "" ]; do
echo importing $1
IFS=@ read -r dependency extension <<< "$1"
IFS=: read -ra FIELDS <<< "${dependency}"
groupId="${FIELDS[0]}"
artifactId="${FIELDS[1]}"
version="${FIELDS[2]}"
classifier="${FIELDS[3]}"
# download the actual artifact
downloadArtifact "$groupId" "$artifactId" "$version" "$classifier" "$extension"
# try to download the sources jar
downloadArtifact "$groupId" "$artifactId" "$version" "sources" "jar" || true
# go to next artifact
shift
done
echo done downloading dependencies
}
# usage: downloadArtifact "$group" "$artifact" "$version" "$classifier" "$extension"
function downloadArtifact() {
pomPath="$PWD/pom.xml"
echo creating $pomPath
pomPrefix='<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.android.build</groupId>
<artifactId>m2repository</artifactId>
<version>1.0</version>
<repositories>
<repository>
<id>google</id>
<name>Google</name>
<url>https://maven.google.com</url>
</repository>
<repository>
<id>jcenter</id>
<name>JCenter</name>
<url>https://jcenter.bintray.com</url>
</repository>
</repositories>
<dependencies>
'
pomSuffix='
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<includeScope>runtime</includeScope>
<addParentPoms>true</addParentPoms>
<copyPom>true</copyPom>
<useRepositoryLayout>true</useRepositoryLayout>
<outputDirectory>m2repository</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
'
groupId="$1"
artifactId="$2"
version="$3"
classifier="$4"
extension="$5"
pomDependencies=""
dependencyText=$(echo -e "\n <dependency>\n <groupId>${groupId}</groupId>\n <artifactId>${artifactId}</artifactId>\n <version>${version}</version>")
[ $classifier ] && dependencyText+=$(echo -e "\n <classifier>${classifier}</classifier>")
[ $extension ] && dependencyText+=$(echo -e "\n <type>${extension}</type>")
dependencyText+=$(echo -e "\n </dependency>")
pomDependencies="${pomDependencies}${dependencyText}"
echo "${pomPrefix}${pomDependencies}${pomSuffix}" > $pomPath
echo done creating $pomPath
echo downloading one dependency into $inputRepo
mvn -f "$pomPath" dependency:copy-dependencies
echo done downloading one dependency into $inputRepo
}
# generates an appropriately formatted repository for merging into existing repositories,
# by computing artifact metadata
function stageRepo() {
echo staging to $stageRepo
rm -rf $stageRepo
for f in $(find $inputRepo -type f | grep -v '\.sha1$' | grep -v '\.md5'); do
md5=$(md5sum $f | sed 's/ .*//')
sha1=$(sha1sum $f | sed 's/ .*//')
relPath=$(echo $f | sed "s|$inputRepo/||")
relDir=$(dirname $relPath)
fileName=$(basename $relPath)
writeChecksums="true"
destDir="$stageRepo/$relDir"
destFile="$stageRepo/$relPath"
if [ "$fileName" == "maven-metadata-local.xml" ]; then
writeChecksums="false"
destFile="$destDir/maven-metadata.xml"
fi
mkdir -p $destDir
if [ "$writeChecksums" == "true" ]; then
echo -n $md5 > "${destFile}.md5"
echo -n $sha1 > "${destFile}.sha1"
fi
cp $f $destFile
done
echo done staging to $stageRepo
}
function announceCopy() {
input=$1
output=$2
if stat $input > /dev/null 2>/dev/null; then
echo copying "$input" to "$output"
cp -rT $input $output
fi
}
function exportArtifact() {
echo exporting
announceCopy $stageRepo/com/android $destAndroidRepo/com/android
rm -rf $stageRepo/com/android
announceCopy $stageRepo/androidx $destAndroidRepo/androidx
rm -rf $stageRepo/androidx
announceCopy $stageRepo $destThirdPartyRepo
echo done exporting
}
function main() {
downloadArtifacts "$@"
stageRepo
exportArtifact
}
main "$@"