Bash程序  |  192行  |  5.36 KB

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