| 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 "$@" |