#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # This script should be used to install additional dependencies # This includes: installing ubuntu packages, custom services # or internet downloads. # Authored by Rafael da Fonseca #Get all dependency blocks from all pom.xml files in the project for line in $(find ../../ -name pom.xml -exec sed -n '//{:a;n;/<\/dependencies>/b;p;ba}' {} \; | grep -e "artifactId" -e "groupId" -e "version" -e "dependency\>" -e "exclusion\>" -e "exclusions\>"| sed -e 's/\^M//'); do #Tokenize values set -- $(echo $line | awk -v FS="(>|<)" '{print $2, $3}') #Start processing data if [[ $1 == "dependency" ]]; then #Create new artifact dep unset ARTIFACT unset VERSION unset GROUP elif [[ $1 == "/dependency" ]]; then #Filter out project modules interdependencies if [[ $GROUP != *org.apache.cloudstack* ]] && [[ $GROUP != *com.cloud* ]] && [[ $ARTIFACT != cloudstack-service-console-proxy-rdpclient ]]; then if [[ -z $VERSION ]] ; then VERSION=LATEST #These dependencies don't support the LATEST keywork for some reason, and would cause mvn runs to file on dummy poms if [[ $GROUP == jstl ]] || [[ $ARTIFACT == mysql-connector-java ]] || [[ $GROUP == org.apache.axis ]]; then continue fi fi #Output resolved dependency to a file, to be picked up later echo "$GROUP $ARTIFACT $VERSION" >> deps.out fi elif [[ $1 == "version" ]]; then #If version is a maven var, get the value from parent pom if [[ $2 == \$\{* ]]; then VERSION=$(grep \<$(echo $2 | awk -v FS="(}|{)" '{print $2 }') ../../pom.xml | awk -v FS="(>|<)" '{print $3}') #If version tag is empty, add LATEST to avoid maven errors elif [[ "$2" == "" ]]; then VERSION="LATEST" else VERSION=$2 fi elif [[ $1 == "artifactId" ]]; then #This avoids exclusions inside dependency block to overwrite original dependency if [[ -z $ARTIFACT ]]; then ARTIFACT=$2 fi elif [[ $1 == "groupId" ]]; then #This avoids exclusions inside dependency block to overwrite original dependency if [[ -z $GROUP ]]; then GROUP=$2 fi fi done #Add the resolved plugins to properly download their dependencies while read line ; do NAME=$(echo $line | sed -e 's/.jar$//') VERSION=${NAME##*-} ARTIFACT=${NAME%-*} GROUP=$(find ~/.m2/repository -name ${NAME}.pom -exec sed -n "1,/${ARTIFACT}/p" {} \; | tac | grep -m 1 -e "" | sed -e 's/^[[:space:]]*//' -e 's/\^M//' | tr -d '\r' | awk -v FS="(>|<)" '{print $3}') DATA="${GROUP} ${ARTIFACT} ${VERSION}" echo $DATA >> deps.out done < /tmp/resolvedPlugins #Remove duplicates and sort them, LANG export is needed to fix some sorting issue, sorting is needed for later function that relies on sorted input cat deps.out | LANG=C sort -u > cleandeps.out #Define index of pomfiles, to avoid duplicate deps with different versions in pom.xml, several poms are created in case of more than one version of same artifact LASTPOM=0 #Create first pom echo '4.0.0org.apache.cloudstacktravis-build-depsDownload Deps for Travis CI1' > pom${LASTPOM}.xml #Create pom for dependencies not on central repo, this is done separately to not adversely impact performance on downloading the majority of deps echo '4.0.0org.apache.cloudstacktravis-build-depsDownload Deps for Travis CI1mido-maven-public-releasesmido-maven-public-releaseshttp://cs-maven.midokura.com/releasesjuniper-contrailhttp://juniper.github.io/contrail-maven/snapshots' > pomX.xml while read line ; do set -- $line #This relies on correct sorting, and distributes different versions of same dependency througout different pom files if [[ $2 == $LASTARTIFACT ]]; then POMID=$(($POMID+1)) #If value is greater than current number of poms, create a new one if [[ $POMID -gt $LASTPOM ]]; then LASTPOM=$POMID #This outputs the necessary structure to start a pom and also defines the extra repositories echo '4.0.0org.apache.cloudstacktravis-build-depsDownload Deps for Travis CI1' > pom${LASTPOM}.xml fi else POMID=0 fi LASTARTIFACT=$2 if [[ $1 == org.midonet ]] || [[ $1 == net.juniper* ]]; then echo "$1$2$3" >> pomX.xml else echo "$1$2$3" >> pom${POMID}.xml fi done < cleandeps.out RETURN_CODE=0 #Close and resolve all pom files for ((i=0;i<=$LASTPOM;i++)) do echo "" >> pom${i}.xml mvn org.apache.maven.plugins:maven-dependency-plugin:resolve -f pom${i}.xml if [[ $? -ne 0 ]]; then RETURN_CODE=1 fi done #Close and resolve external deps pom file echo "" >> pomX.xml mvn org.apache.maven.plugins:maven-dependency-plugin:resolve -f pomX.xml #Run a few plugin goals to download some more deps #Hack to run maven-jaxb2-plugin generate, can be removed when we stop using such an old version... mkdir -p src/main/resources echo '' > src/main/resources/test.xsd #Declare plugin tests to run declare -a arr=("maven-surefire-plugin test" "maven-pmd-plugin pmd" "maven-compiler-plugin compile" "maven-resources-plugin resources" "maven-checkstyle-plugin check" "maven-site-plugin attach-descriptor" "maven-surefire-plugin test" "maven-jar-plugin jar" "license-maven-plugin check" "maven-jgit-buildnumber-plugin extract-buildnumber" "maven-jaxb2-plugin generate" "maven-war-plugin war -DfailOnMissingWebXml=false" "gmaven-plugin compile") for i in "${arr[@]}" do set -- $i PLUGIN=$1 MOJO=$2 OPTION=$3 #Get every listed version of the plugin and make a run for each version while read line ; do set -- $line JOBS="${JOBS} ${1}:${2}:${3}:${MOJO} $OPTION" done < <(grep $PLUGIN cleandeps.out) done echo "Running $JOBS" #Call all the constructed plugin goals mvn $JOBS -f pom0.xml if [[ $? -ne 0 ]]; then RETURN_CODE=1 fi #Cleanup some files created in the run rm -rf deps.out src target exit $RETURN_CODE