You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
5.7 KiB
211 lines
5.7 KiB
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
readonly DEST_REPO="$(dirname $(readlink -f "$0"))/../.."
|
|
readonly INPUT_REPO="m2repository"
|
|
readonly STAGE_REPO="m2staged"
|
|
readonly DEST_ANDROID_REPO="${DEST_REPO}/prebuilts/manifest-merger"
|
|
|
|
if ! TEMP_DIR=$(mktemp -d); then
|
|
echo "ERROR: failed to create dir"
|
|
exit 1
|
|
fi
|
|
readonly TEMP_DIR
|
|
|
|
function cleanup() {
|
|
rm -rf "${TEMP_DIR}"
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
cd "${TEMP_DIR}"
|
|
|
|
function usage() {
|
|
cat <<EOF
|
|
Usage: $(basename $0) group:artifact:version[:classifier][@extension] [group:artifact:version[:classifier][@extension]...]
|
|
|
|
Downloads the specified artifacts into the appropriate subdirectory of ${DEST_REPO}/prebuilts
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
# usage: downloadArtifacts "$group:$artifact:$version[:classifier][@extension]..."
|
|
function downloadArtifacts() {
|
|
[ -z "$1" ] && usage
|
|
|
|
echo "downloading dependencies into ${INPUT_REPO}"
|
|
rm -rf "${INPUT_REPO}"
|
|
for arg in $*; do
|
|
echo "importing ${arg}"
|
|
IFS=@ read -r dependency extension <<< "${arg}"
|
|
IFS=: read -ra FIELDS <<< "${dependency}"
|
|
local -r groupId="${FIELDS[0]}"
|
|
local -r artifactId="${FIELDS[1]}"
|
|
local -r version="${FIELDS[2]}"
|
|
local -r 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
|
|
done
|
|
echo "done downloading dependencies"
|
|
}
|
|
|
|
# usage: generatePomFile "$pomFile" "$group" "$artifact" "$version" "$classifier" "$extension"
|
|
function generatePomFile() {
|
|
local -r pomFile="$1"
|
|
local -r groupId="$2"
|
|
local -r artifactId="$3"
|
|
local -r version="$4"
|
|
local -r classifier="$5"
|
|
local -r extension="$6"
|
|
|
|
local pomDependencies=""
|
|
|
|
echo "creating ${pomFile}"
|
|
cat <<EOF > "${pomFile}"
|
|
<?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>
|
|
<dependency>
|
|
<groupId>${groupId}</groupId>
|
|
<artifactId>${artifactId}</artifactId>
|
|
<version>${version}</version>
|
|
EOF
|
|
|
|
if [ -n "${classifier}" ]; then
|
|
cat <<EOF >> "${pomFile}"
|
|
<classifier>${classifier}</classifier>
|
|
EOF
|
|
fi
|
|
|
|
if [ -n "${extension}" ]; then
|
|
cat <<EOF >> "${pomFile}"
|
|
<type>${extension}</type>
|
|
EOF
|
|
fi
|
|
|
|
cat <<EOF >> "${pomFile}"
|
|
</dependency>
|
|
</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>
|
|
EOF
|
|
|
|
echo "done creating ${pomFile}"
|
|
}
|
|
|
|
# usage: downloadArtifact "$group" "$artifact" "$version" "$classifier" "$extension"
|
|
function downloadArtifact() {
|
|
local -r pomFile="${PWD}/pom.xml"
|
|
|
|
generatePomFile "${pomFile}" "$@"
|
|
|
|
echo "downloading one dependency into ${INPUT_REPO}"
|
|
mvn -f "${pomFile}" dependency:copy-dependencies
|
|
echo "done downloading one dependency into ${INPUT_REPO}"
|
|
}
|
|
|
|
# generates an appropriately formatted repository for merging into existing repositories,
|
|
# by computing artifact metadata
|
|
function createStageRepo() (
|
|
echo "staging to ${STAGE_REPO}"
|
|
rm -rf "${STAGE_REPO}"
|
|
|
|
for f in $(find "${INPUT_REPO}" -type f ! -name "*.sha1" ! -name "*.md5"); do
|
|
local relPath="${f##${INPUT_REPO}}"
|
|
local relDir=$(dirname "${relPath}")
|
|
|
|
local fileName=$(basename "${relPath}")
|
|
local writeChecksums=true
|
|
|
|
local destDir="${STAGE_REPO}/${relDir}"
|
|
local destFile="${STAGE_REPO}/${relPath}"
|
|
if [ "${fileName}" == "maven-metadata-local.xml" ]; then
|
|
writeChecksums=false
|
|
destFile="${destDir}/maven-metadata.xml"
|
|
fi
|
|
|
|
mkdir -p "${destDir}"
|
|
if ${writeChecksums}; then
|
|
local md5=$(md5sum "${f}" | sed 's/ .*//')
|
|
local sha1=$(sha1sum "${f}" | sed 's/ .*//')
|
|
echo -n ${md5} > "${destFile}.md5"
|
|
echo -n ${sha1} > "${destFile}.sha1"
|
|
fi
|
|
cp "${f}" "${destFile}"
|
|
done
|
|
|
|
echo "done staging to ${STAGE_REPO}"
|
|
)
|
|
|
|
function announceCopy() {
|
|
local -r input="$1"
|
|
local -r output="$2"
|
|
if [ -e "${input}" ]; then
|
|
echo "copying '${input}' to '${output}'"
|
|
cp -rT "${input}" "${output}"
|
|
fi
|
|
}
|
|
|
|
function exportArtifact() {
|
|
echo "exporting"
|
|
|
|
mkdir -p "${DEST_ANDROID_REPO}/com/android"
|
|
announceCopy "${STAGE_REPO}/com/android" "${DEST_ANDROID_REPO}/com/android"
|
|
rm -rf "${STAGE_REPO}/com/android"
|
|
|
|
echo "done exporting"
|
|
}
|
|
|
|
|
|
function main() {
|
|
downloadArtifacts "$@"
|
|
createStageRepo
|
|
exportArtifact
|
|
}
|
|
|
|
main "$@"
|