1*68017707SAndroid Build Coastguard Worker#!/bin/sh 2*68017707SAndroid Build Coastguard Worker# ---------------------------------------------------------------------------- 3*68017707SAndroid Build Coastguard Worker# Licensed to the Apache Software Foundation (ASF) under one 4*68017707SAndroid Build Coastguard Worker# or more contributor license agreements. See the NOTICE file 5*68017707SAndroid Build Coastguard Worker# distributed with this work for additional information 6*68017707SAndroid Build Coastguard Worker# regarding copyright ownership. The ASF licenses this file 7*68017707SAndroid Build Coastguard Worker# to you under the Apache License, Version 2.0 (the 8*68017707SAndroid Build Coastguard Worker# "License"); you may not use this file except in compliance 9*68017707SAndroid Build Coastguard Worker# with the License. You may obtain a copy of the License at 10*68017707SAndroid Build Coastguard Worker# 11*68017707SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 12*68017707SAndroid Build Coastguard Worker# 13*68017707SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, 14*68017707SAndroid Build Coastguard Worker# software distributed under the License is distributed on an 15*68017707SAndroid Build Coastguard Worker# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*68017707SAndroid Build Coastguard Worker# KIND, either express or implied. See the License for the 17*68017707SAndroid Build Coastguard Worker# specific language governing permissions and limitations 18*68017707SAndroid Build Coastguard Worker# under the License. 19*68017707SAndroid Build Coastguard Worker# ---------------------------------------------------------------------------- 20*68017707SAndroid Build Coastguard Worker 21*68017707SAndroid Build Coastguard Worker# ---------------------------------------------------------------------------- 22*68017707SAndroid Build Coastguard Worker# Maven2 Start Up Batch script 23*68017707SAndroid Build Coastguard Worker# 24*68017707SAndroid Build Coastguard Worker# Required ENV vars: 25*68017707SAndroid Build Coastguard Worker# ------------------ 26*68017707SAndroid Build Coastguard Worker# JAVA_HOME - location of a JDK home dir 27*68017707SAndroid Build Coastguard Worker# 28*68017707SAndroid Build Coastguard Worker# Optional ENV vars 29*68017707SAndroid Build Coastguard Worker# ----------------- 30*68017707SAndroid Build Coastguard Worker# M2_HOME - location of maven2's installed home dir 31*68017707SAndroid Build Coastguard Worker# MAVEN_OPTS - parameters passed to the Java VM when running Maven 32*68017707SAndroid Build Coastguard Worker# e.g. to debug Maven itself, use 33*68017707SAndroid Build Coastguard Worker# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34*68017707SAndroid Build Coastguard Worker# MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35*68017707SAndroid Build Coastguard Worker# ---------------------------------------------------------------------------- 36*68017707SAndroid Build Coastguard Worker 37*68017707SAndroid Build Coastguard Workerif [ -z "$MAVEN_SKIP_RC" ] ; then 38*68017707SAndroid Build Coastguard Worker 39*68017707SAndroid Build Coastguard Worker if [ -f /etc/mavenrc ] ; then 40*68017707SAndroid Build Coastguard Worker . /etc/mavenrc 41*68017707SAndroid Build Coastguard Worker fi 42*68017707SAndroid Build Coastguard Worker 43*68017707SAndroid Build Coastguard Worker if [ -f "$HOME/.mavenrc" ] ; then 44*68017707SAndroid Build Coastguard Worker . "$HOME/.mavenrc" 45*68017707SAndroid Build Coastguard Worker fi 46*68017707SAndroid Build Coastguard Worker 47*68017707SAndroid Build Coastguard Workerfi 48*68017707SAndroid Build Coastguard Worker 49*68017707SAndroid Build Coastguard Worker# OS specific support. $var _must_ be set to either true or false. 50*68017707SAndroid Build Coastguard Workercygwin=false; 51*68017707SAndroid Build Coastguard Workerdarwin=false; 52*68017707SAndroid Build Coastguard Workermingw=false 53*68017707SAndroid Build Coastguard Workercase "`uname`" in 54*68017707SAndroid Build Coastguard Worker CYGWIN*) cygwin=true ;; 55*68017707SAndroid Build Coastguard Worker MINGW*) mingw=true;; 56*68017707SAndroid Build Coastguard Worker Darwin*) darwin=true 57*68017707SAndroid Build Coastguard Worker # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58*68017707SAndroid Build Coastguard Worker # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59*68017707SAndroid Build Coastguard Worker if [ -z "$JAVA_HOME" ]; then 60*68017707SAndroid Build Coastguard Worker if [ -x "/usr/libexec/java_home" ]; then 61*68017707SAndroid Build Coastguard Worker export JAVA_HOME="`/usr/libexec/java_home`" 62*68017707SAndroid Build Coastguard Worker else 63*68017707SAndroid Build Coastguard Worker export JAVA_HOME="/Library/Java/Home" 64*68017707SAndroid Build Coastguard Worker fi 65*68017707SAndroid Build Coastguard Worker fi 66*68017707SAndroid Build Coastguard Worker ;; 67*68017707SAndroid Build Coastguard Workeresac 68*68017707SAndroid Build Coastguard Worker 69*68017707SAndroid Build Coastguard Workerif [ -z "$JAVA_HOME" ] ; then 70*68017707SAndroid Build Coastguard Worker if [ -r /etc/gentoo-release ] ; then 71*68017707SAndroid Build Coastguard Worker JAVA_HOME=`java-config --jre-home` 72*68017707SAndroid Build Coastguard Worker fi 73*68017707SAndroid Build Coastguard Workerfi 74*68017707SAndroid Build Coastguard Worker 75*68017707SAndroid Build Coastguard Workerif [ -z "$M2_HOME" ] ; then 76*68017707SAndroid Build Coastguard Worker ## resolve links - $0 may be a link to maven's home 77*68017707SAndroid Build Coastguard Worker PRG="$0" 78*68017707SAndroid Build Coastguard Worker 79*68017707SAndroid Build Coastguard Worker # need this for relative symlinks 80*68017707SAndroid Build Coastguard Worker while [ -h "$PRG" ] ; do 81*68017707SAndroid Build Coastguard Worker ls=`ls -ld "$PRG"` 82*68017707SAndroid Build Coastguard Worker link=`expr "$ls" : '.*-> \(.*\)$'` 83*68017707SAndroid Build Coastguard Worker if expr "$link" : '/.*' > /dev/null; then 84*68017707SAndroid Build Coastguard Worker PRG="$link" 85*68017707SAndroid Build Coastguard Worker else 86*68017707SAndroid Build Coastguard Worker PRG="`dirname "$PRG"`/$link" 87*68017707SAndroid Build Coastguard Worker fi 88*68017707SAndroid Build Coastguard Worker done 89*68017707SAndroid Build Coastguard Worker 90*68017707SAndroid Build Coastguard Worker saveddir=`pwd` 91*68017707SAndroid Build Coastguard Worker 92*68017707SAndroid Build Coastguard Worker M2_HOME=`dirname "$PRG"`/.. 93*68017707SAndroid Build Coastguard Worker 94*68017707SAndroid Build Coastguard Worker # make it fully qualified 95*68017707SAndroid Build Coastguard Worker M2_HOME=`cd "$M2_HOME" && pwd` 96*68017707SAndroid Build Coastguard Worker 97*68017707SAndroid Build Coastguard Worker cd "$saveddir" 98*68017707SAndroid Build Coastguard Worker # echo Using m2 at $M2_HOME 99*68017707SAndroid Build Coastguard Workerfi 100*68017707SAndroid Build Coastguard Worker 101*68017707SAndroid Build Coastguard Worker# For Cygwin, ensure paths are in UNIX format before anything is touched 102*68017707SAndroid Build Coastguard Workerif $cygwin ; then 103*68017707SAndroid Build Coastguard Worker [ -n "$M2_HOME" ] && 104*68017707SAndroid Build Coastguard Worker M2_HOME=`cygpath --unix "$M2_HOME"` 105*68017707SAndroid Build Coastguard Worker [ -n "$JAVA_HOME" ] && 106*68017707SAndroid Build Coastguard Worker JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107*68017707SAndroid Build Coastguard Worker [ -n "$CLASSPATH" ] && 108*68017707SAndroid Build Coastguard Worker CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109*68017707SAndroid Build Coastguard Workerfi 110*68017707SAndroid Build Coastguard Worker 111*68017707SAndroid Build Coastguard Worker# For Mingw, ensure paths are in UNIX format before anything is touched 112*68017707SAndroid Build Coastguard Workerif $mingw ; then 113*68017707SAndroid Build Coastguard Worker [ -n "$M2_HOME" ] && 114*68017707SAndroid Build Coastguard Worker M2_HOME="`(cd "$M2_HOME"; pwd)`" 115*68017707SAndroid Build Coastguard Worker [ -n "$JAVA_HOME" ] && 116*68017707SAndroid Build Coastguard Worker JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117*68017707SAndroid Build Coastguard Worker # TODO classpath? 118*68017707SAndroid Build Coastguard Workerfi 119*68017707SAndroid Build Coastguard Worker 120*68017707SAndroid Build Coastguard Workerif [ -z "$JAVA_HOME" ]; then 121*68017707SAndroid Build Coastguard Worker javaExecutable="`which javac`" 122*68017707SAndroid Build Coastguard Worker if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123*68017707SAndroid Build Coastguard Worker # readlink(1) is not available as standard on Solaris 10. 124*68017707SAndroid Build Coastguard Worker readLink=`which readlink` 125*68017707SAndroid Build Coastguard Worker if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126*68017707SAndroid Build Coastguard Worker if $darwin ; then 127*68017707SAndroid Build Coastguard Worker javaHome="`dirname \"$javaExecutable\"`" 128*68017707SAndroid Build Coastguard Worker javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129*68017707SAndroid Build Coastguard Worker else 130*68017707SAndroid Build Coastguard Worker javaExecutable="`readlink -f \"$javaExecutable\"`" 131*68017707SAndroid Build Coastguard Worker fi 132*68017707SAndroid Build Coastguard Worker javaHome="`dirname \"$javaExecutable\"`" 133*68017707SAndroid Build Coastguard Worker javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134*68017707SAndroid Build Coastguard Worker JAVA_HOME="$javaHome" 135*68017707SAndroid Build Coastguard Worker export JAVA_HOME 136*68017707SAndroid Build Coastguard Worker fi 137*68017707SAndroid Build Coastguard Worker fi 138*68017707SAndroid Build Coastguard Workerfi 139*68017707SAndroid Build Coastguard Worker 140*68017707SAndroid Build Coastguard Workerif [ -z "$JAVACMD" ] ; then 141*68017707SAndroid Build Coastguard Worker if [ -n "$JAVA_HOME" ] ; then 142*68017707SAndroid Build Coastguard Worker if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143*68017707SAndroid Build Coastguard Worker # IBM's JDK on AIX uses strange locations for the executables 144*68017707SAndroid Build Coastguard Worker JAVACMD="$JAVA_HOME/jre/sh/java" 145*68017707SAndroid Build Coastguard Worker else 146*68017707SAndroid Build Coastguard Worker JAVACMD="$JAVA_HOME/bin/java" 147*68017707SAndroid Build Coastguard Worker fi 148*68017707SAndroid Build Coastguard Worker else 149*68017707SAndroid Build Coastguard Worker JAVACMD="`which java`" 150*68017707SAndroid Build Coastguard Worker fi 151*68017707SAndroid Build Coastguard Workerfi 152*68017707SAndroid Build Coastguard Worker 153*68017707SAndroid Build Coastguard Workerif [ ! -x "$JAVACMD" ] ; then 154*68017707SAndroid Build Coastguard Worker echo "Error: JAVA_HOME is not defined correctly." >&2 155*68017707SAndroid Build Coastguard Worker echo " We cannot execute $JAVACMD" >&2 156*68017707SAndroid Build Coastguard Worker exit 1 157*68017707SAndroid Build Coastguard Workerfi 158*68017707SAndroid Build Coastguard Worker 159*68017707SAndroid Build Coastguard Workerif [ -z "$JAVA_HOME" ] ; then 160*68017707SAndroid Build Coastguard Worker echo "Warning: JAVA_HOME environment variable is not set." 161*68017707SAndroid Build Coastguard Workerfi 162*68017707SAndroid Build Coastguard Worker 163*68017707SAndroid Build Coastguard WorkerCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164*68017707SAndroid Build Coastguard Worker 165*68017707SAndroid Build Coastguard Worker# traverses directory structure from process work directory to filesystem root 166*68017707SAndroid Build Coastguard Worker# first directory with .mvn subdirectory is considered project base directory 167*68017707SAndroid Build Coastguard Workerfind_maven_basedir() { 168*68017707SAndroid Build Coastguard Worker 169*68017707SAndroid Build Coastguard Worker if [ -z "$1" ] 170*68017707SAndroid Build Coastguard Worker then 171*68017707SAndroid Build Coastguard Worker echo "Path not specified to find_maven_basedir" 172*68017707SAndroid Build Coastguard Worker return 1 173*68017707SAndroid Build Coastguard Worker fi 174*68017707SAndroid Build Coastguard Worker 175*68017707SAndroid Build Coastguard Worker basedir="$1" 176*68017707SAndroid Build Coastguard Worker wdir="$1" 177*68017707SAndroid Build Coastguard Worker while [ "$wdir" != '/' ] ; do 178*68017707SAndroid Build Coastguard Worker if [ -d "$wdir"/.mvn ] ; then 179*68017707SAndroid Build Coastguard Worker basedir=$wdir 180*68017707SAndroid Build Coastguard Worker break 181*68017707SAndroid Build Coastguard Worker fi 182*68017707SAndroid Build Coastguard Worker # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183*68017707SAndroid Build Coastguard Worker if [ -d "${wdir}" ]; then 184*68017707SAndroid Build Coastguard Worker wdir=`cd "$wdir/.."; pwd` 185*68017707SAndroid Build Coastguard Worker fi 186*68017707SAndroid Build Coastguard Worker # end of workaround 187*68017707SAndroid Build Coastguard Worker done 188*68017707SAndroid Build Coastguard Worker echo "${basedir}" 189*68017707SAndroid Build Coastguard Worker} 190*68017707SAndroid Build Coastguard Worker 191*68017707SAndroid Build Coastguard Worker# concatenates all lines of a file 192*68017707SAndroid Build Coastguard Workerconcat_lines() { 193*68017707SAndroid Build Coastguard Worker if [ -f "$1" ]; then 194*68017707SAndroid Build Coastguard Worker echo "$(tr -s '\n' ' ' < "$1")" 195*68017707SAndroid Build Coastguard Worker fi 196*68017707SAndroid Build Coastguard Worker} 197*68017707SAndroid Build Coastguard Worker 198*68017707SAndroid Build Coastguard WorkerBASE_DIR=`find_maven_basedir "$(pwd)"` 199*68017707SAndroid Build Coastguard Workerif [ -z "$BASE_DIR" ]; then 200*68017707SAndroid Build Coastguard Worker exit 1; 201*68017707SAndroid Build Coastguard Workerfi 202*68017707SAndroid Build Coastguard Worker 203*68017707SAndroid Build Coastguard Workerexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 204*68017707SAndroid Build Coastguard Workerif [ "$MVNW_VERBOSE" = true ]; then 205*68017707SAndroid Build Coastguard Worker echo $MAVEN_PROJECTBASEDIR 206*68017707SAndroid Build Coastguard Workerfi 207*68017707SAndroid Build Coastguard WorkerMAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 208*68017707SAndroid Build Coastguard Worker 209*68017707SAndroid Build Coastguard Worker# For Cygwin, switch paths to Windows format before running java 210*68017707SAndroid Build Coastguard Workerif $cygwin; then 211*68017707SAndroid Build Coastguard Worker [ -n "$M2_HOME" ] && 212*68017707SAndroid Build Coastguard Worker M2_HOME=`cygpath --path --windows "$M2_HOME"` 213*68017707SAndroid Build Coastguard Worker [ -n "$JAVA_HOME" ] && 214*68017707SAndroid Build Coastguard Worker JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 215*68017707SAndroid Build Coastguard Worker [ -n "$CLASSPATH" ] && 216*68017707SAndroid Build Coastguard Worker CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 217*68017707SAndroid Build Coastguard Worker [ -n "$MAVEN_PROJECTBASEDIR" ] && 218*68017707SAndroid Build Coastguard Worker MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 219*68017707SAndroid Build Coastguard Workerfi 220*68017707SAndroid Build Coastguard Worker 221*68017707SAndroid Build Coastguard WorkerWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 222*68017707SAndroid Build Coastguard Worker 223*68017707SAndroid Build Coastguard Workerexec "$JAVACMD" \ 224*68017707SAndroid Build Coastguard Worker $MAVEN_OPTS \ 225*68017707SAndroid Build Coastguard Worker -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 226*68017707SAndroid Build Coastguard Worker "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 227*68017707SAndroid Build Coastguard Worker ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 228