1*33edd672SMark#!/bin/sh 2*33edd672SMark# ---------------------------------------------------------------------------- 3*33edd672SMark# Licensed to the Apache Software Foundation (ASF) under one 4*33edd672SMark# or more contributor license agreements. See the NOTICE file 5*33edd672SMark# distributed with this work for additional information 6*33edd672SMark# regarding copyright ownership. The ASF licenses this file 7*33edd672SMark# to you under the Apache License, Version 2.0 (the 8*33edd672SMark# "License"); you may not use this file except in compliance 9*33edd672SMark# with the License. You may obtain a copy of the License at 10*33edd672SMark# 11*33edd672SMark# https://www.apache.org/licenses/LICENSE-2.0 12*33edd672SMark# 13*33edd672SMark# Unless required by applicable law or agreed to in writing, 14*33edd672SMark# software distributed under the License is distributed on an 15*33edd672SMark# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*33edd672SMark# KIND, either express or implied. See the License for the 17*33edd672SMark# specific language governing permissions and limitations 18*33edd672SMark# under the License. 19*33edd672SMark# ---------------------------------------------------------------------------- 20*33edd672SMark 21*33edd672SMark# ---------------------------------------------------------------------------- 22*33edd672SMark# Maven Start Up Batch script 23*33edd672SMark# 24*33edd672SMark# Required ENV vars: 25*33edd672SMark# ------------------ 26*33edd672SMark# JAVA_HOME - location of a JDK home dir 27*33edd672SMark# 28*33edd672SMark# Optional ENV vars 29*33edd672SMark# ----------------- 30*33edd672SMark# M2_HOME - location of maven2's installed home dir 31*33edd672SMark# MAVEN_OPTS - parameters passed to the Java VM when running Maven 32*33edd672SMark# e.g. to debug Maven itself, use 33*33edd672SMark# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34*33edd672SMark# MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35*33edd672SMark# ---------------------------------------------------------------------------- 36*33edd672SMark 37*33edd672SMarkif [ -z "$MAVEN_SKIP_RC" ] ; then 38*33edd672SMark 39*33edd672SMark if [ -f /usr/local/etc/mavenrc ] ; then 40*33edd672SMark . /usr/local/etc/mavenrc 41*33edd672SMark fi 42*33edd672SMark 43*33edd672SMark if [ -f /etc/mavenrc ] ; then 44*33edd672SMark . /etc/mavenrc 45*33edd672SMark fi 46*33edd672SMark 47*33edd672SMark if [ -f "$HOME/.mavenrc" ] ; then 48*33edd672SMark . "$HOME/.mavenrc" 49*33edd672SMark fi 50*33edd672SMark 51*33edd672SMarkfi 52*33edd672SMark 53*33edd672SMark# OS specific support. $var _must_ be set to either true or false. 54*33edd672SMarkcygwin=false; 55*33edd672SMarkdarwin=false; 56*33edd672SMarkmingw=false 57*33edd672SMarkcase "`uname`" in 58*33edd672SMark CYGWIN*) cygwin=true ;; 59*33edd672SMark MINGW*) mingw=true;; 60*33edd672SMark Darwin*) darwin=true 61*33edd672SMark # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 62*33edd672SMark # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 63*33edd672SMark if [ -z "$JAVA_HOME" ]; then 64*33edd672SMark if [ -x "/usr/libexec/java_home" ]; then 65*33edd672SMark export JAVA_HOME="`/usr/libexec/java_home`" 66*33edd672SMark else 67*33edd672SMark export JAVA_HOME="/Library/Java/Home" 68*33edd672SMark fi 69*33edd672SMark fi 70*33edd672SMark ;; 71*33edd672SMarkesac 72*33edd672SMark 73*33edd672SMarkif [ -z "$JAVA_HOME" ] ; then 74*33edd672SMark if [ -r /etc/gentoo-release ] ; then 75*33edd672SMark JAVA_HOME=`java-config --jre-home` 76*33edd672SMark fi 77*33edd672SMarkfi 78*33edd672SMark 79*33edd672SMarkif [ -z "$M2_HOME" ] ; then 80*33edd672SMark ## resolve links - $0 may be a link to maven's home 81*33edd672SMark PRG="$0" 82*33edd672SMark 83*33edd672SMark # need this for relative symlinks 84*33edd672SMark while [ -h "$PRG" ] ; do 85*33edd672SMark ls=`ls -ld "$PRG"` 86*33edd672SMark link=`expr "$ls" : '.*-> \(.*\)$'` 87*33edd672SMark if expr "$link" : '/.*' > /dev/null; then 88*33edd672SMark PRG="$link" 89*33edd672SMark else 90*33edd672SMark PRG="`dirname "$PRG"`/$link" 91*33edd672SMark fi 92*33edd672SMark done 93*33edd672SMark 94*33edd672SMark saveddir=`pwd` 95*33edd672SMark 96*33edd672SMark M2_HOME=`dirname "$PRG"`/.. 97*33edd672SMark 98*33edd672SMark # make it fully qualified 99*33edd672SMark M2_HOME=`cd "$M2_HOME" && pwd` 100*33edd672SMark 101*33edd672SMark cd "$saveddir" 102*33edd672SMark # echo Using m2 at $M2_HOME 103*33edd672SMarkfi 104*33edd672SMark 105*33edd672SMark# For Cygwin, ensure paths are in UNIX format before anything is touched 106*33edd672SMarkif $cygwin ; then 107*33edd672SMark [ -n "$M2_HOME" ] && 108*33edd672SMark M2_HOME=`cygpath --unix "$M2_HOME"` 109*33edd672SMark [ -n "$JAVA_HOME" ] && 110*33edd672SMark JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 111*33edd672SMark [ -n "$CLASSPATH" ] && 112*33edd672SMark CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 113*33edd672SMarkfi 114*33edd672SMark 115*33edd672SMark# For Mingw, ensure paths are in UNIX format before anything is touched 116*33edd672SMarkif $mingw ; then 117*33edd672SMark [ -n "$M2_HOME" ] && 118*33edd672SMark M2_HOME="`(cd "$M2_HOME"; pwd)`" 119*33edd672SMark [ -n "$JAVA_HOME" ] && 120*33edd672SMark JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 121*33edd672SMarkfi 122*33edd672SMark 123*33edd672SMarkif [ -z "$JAVA_HOME" ]; then 124*33edd672SMark javaExecutable="`which javac`" 125*33edd672SMark if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 126*33edd672SMark # readlink(1) is not available as standard on Solaris 10. 127*33edd672SMark readLink=`which readlink` 128*33edd672SMark if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 129*33edd672SMark if $darwin ; then 130*33edd672SMark javaHome="`dirname \"$javaExecutable\"`" 131*33edd672SMark javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 132*33edd672SMark else 133*33edd672SMark javaExecutable="`readlink -f \"$javaExecutable\"`" 134*33edd672SMark fi 135*33edd672SMark javaHome="`dirname \"$javaExecutable\"`" 136*33edd672SMark javaHome=`expr "$javaHome" : '\(.*\)/bin'` 137*33edd672SMark JAVA_HOME="$javaHome" 138*33edd672SMark export JAVA_HOME 139*33edd672SMark fi 140*33edd672SMark fi 141*33edd672SMarkfi 142*33edd672SMark 143*33edd672SMarkif [ -z "$JAVACMD" ] ; then 144*33edd672SMark if [ -n "$JAVA_HOME" ] ; then 145*33edd672SMark if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 146*33edd672SMark # IBM's JDK on AIX uses strange locations for the executables 147*33edd672SMark JAVACMD="$JAVA_HOME/jre/sh/java" 148*33edd672SMark else 149*33edd672SMark JAVACMD="$JAVA_HOME/bin/java" 150*33edd672SMark fi 151*33edd672SMark else 152*33edd672SMark JAVACMD="`\\unset -f command; \\command -v java`" 153*33edd672SMark fi 154*33edd672SMarkfi 155*33edd672SMark 156*33edd672SMarkif [ ! -x "$JAVACMD" ] ; then 157*33edd672SMark echo "Error: JAVA_HOME is not defined correctly." >&2 158*33edd672SMark echo " We cannot execute $JAVACMD" >&2 159*33edd672SMark exit 1 160*33edd672SMarkfi 161*33edd672SMark 162*33edd672SMarkif [ -z "$JAVA_HOME" ] ; then 163*33edd672SMark echo "Warning: JAVA_HOME environment variable is not set." 164*33edd672SMarkfi 165*33edd672SMark 166*33edd672SMarkCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 167*33edd672SMark 168*33edd672SMark# traverses directory structure from process work directory to filesystem root 169*33edd672SMark# first directory with .mvn subdirectory is considered project base directory 170*33edd672SMarkfind_maven_basedir() { 171*33edd672SMark 172*33edd672SMark if [ -z "$1" ] 173*33edd672SMark then 174*33edd672SMark echo "Path not specified to find_maven_basedir" 175*33edd672SMark return 1 176*33edd672SMark fi 177*33edd672SMark 178*33edd672SMark basedir="$1" 179*33edd672SMark wdir="$1" 180*33edd672SMark while [ "$wdir" != '/' ] ; do 181*33edd672SMark if [ -d "$wdir"/.mvn ] ; then 182*33edd672SMark basedir=$wdir 183*33edd672SMark break 184*33edd672SMark fi 185*33edd672SMark # workaround for JBEAP-8937 (on Solaris 10/Sparc) 186*33edd672SMark if [ -d "${wdir}" ]; then 187*33edd672SMark wdir=`cd "$wdir/.."; pwd` 188*33edd672SMark fi 189*33edd672SMark # end of workaround 190*33edd672SMark done 191*33edd672SMark echo "${basedir}" 192*33edd672SMark} 193*33edd672SMark 194*33edd672SMark# concatenates all lines of a file 195*33edd672SMarkconcat_lines() { 196*33edd672SMark if [ -f "$1" ]; then 197*33edd672SMark echo "$(tr -s '\n' ' ' < "$1")" 198*33edd672SMark fi 199*33edd672SMark} 200*33edd672SMark 201*33edd672SMarkBASE_DIR=`find_maven_basedir "$(pwd)"` 202*33edd672SMarkif [ -z "$BASE_DIR" ]; then 203*33edd672SMark exit 1; 204*33edd672SMarkfi 205*33edd672SMark 206*33edd672SMark########################################################################################## 207*33edd672SMark# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 208*33edd672SMark# This allows using the maven wrapper in projects that prohibit checking in binary data. 209*33edd672SMark########################################################################################## 210*33edd672SMarkif [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then 211*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 212*33edd672SMark echo "Found .mvn/wrapper/maven-wrapper.jar" 213*33edd672SMark fi 214*33edd672SMarkelse 215*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 216*33edd672SMark echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." 217*33edd672SMark fi 218*33edd672SMark if [ -n "$MVNW_REPOURL" ]; then 219*33edd672SMark jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" 220*33edd672SMark else 221*33edd672SMark jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" 222*33edd672SMark fi 223*33edd672SMark while IFS="=" read key value; do 224*33edd672SMark case "$key" in (wrapperUrl) jarUrl="$value"; break ;; 225*33edd672SMark esac 226*33edd672SMark done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" 227*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 228*33edd672SMark echo "Downloading from: $jarUrl" 229*33edd672SMark fi 230*33edd672SMark wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" 231*33edd672SMark if $cygwin; then 232*33edd672SMark wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` 233*33edd672SMark fi 234*33edd672SMark 235*33edd672SMark if command -v wget > /dev/null; then 236*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 237*33edd672SMark echo "Found wget ... using wget" 238*33edd672SMark fi 239*33edd672SMark if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 240*33edd672SMark wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" 241*33edd672SMark else 242*33edd672SMark wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" 243*33edd672SMark fi 244*33edd672SMark elif command -v curl > /dev/null; then 245*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 246*33edd672SMark echo "Found curl ... using curl" 247*33edd672SMark fi 248*33edd672SMark if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 249*33edd672SMark curl -o "$wrapperJarPath" "$jarUrl" -f 250*33edd672SMark else 251*33edd672SMark curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f 252*33edd672SMark fi 253*33edd672SMark 254*33edd672SMark else 255*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 256*33edd672SMark echo "Falling back to using Java to download" 257*33edd672SMark fi 258*33edd672SMark javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" 259*33edd672SMark # For Cygwin, switch paths to Windows format before running javac 260*33edd672SMark if $cygwin; then 261*33edd672SMark javaClass=`cygpath --path --windows "$javaClass"` 262*33edd672SMark fi 263*33edd672SMark if [ -e "$javaClass" ]; then 264*33edd672SMark if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 265*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 266*33edd672SMark echo " - Compiling MavenWrapperDownloader.java ..." 267*33edd672SMark fi 268*33edd672SMark # Compiling the Java class 269*33edd672SMark ("$JAVA_HOME/bin/javac" "$javaClass") 270*33edd672SMark fi 271*33edd672SMark if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 272*33edd672SMark # Running the downloader 273*33edd672SMark if [ "$MVNW_VERBOSE" = true ]; then 274*33edd672SMark echo " - Running MavenWrapperDownloader.java ..." 275*33edd672SMark fi 276*33edd672SMark ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") 277*33edd672SMark fi 278*33edd672SMark fi 279*33edd672SMark fi 280*33edd672SMarkfi 281*33edd672SMark########################################################################################## 282*33edd672SMark# End of extension 283*33edd672SMark########################################################################################## 284*33edd672SMark 285*33edd672SMarkexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 286*33edd672SMarkif [ "$MVNW_VERBOSE" = true ]; then 287*33edd672SMark echo $MAVEN_PROJECTBASEDIR 288*33edd672SMarkfi 289*33edd672SMarkMAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 290*33edd672SMark 291*33edd672SMark# For Cygwin, switch paths to Windows format before running java 292*33edd672SMarkif $cygwin; then 293*33edd672SMark [ -n "$M2_HOME" ] && 294*33edd672SMark M2_HOME=`cygpath --path --windows "$M2_HOME"` 295*33edd672SMark [ -n "$JAVA_HOME" ] && 296*33edd672SMark JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 297*33edd672SMark [ -n "$CLASSPATH" ] && 298*33edd672SMark CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 299*33edd672SMark [ -n "$MAVEN_PROJECTBASEDIR" ] && 300*33edd672SMark MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 301*33edd672SMarkfi 302*33edd672SMark 303*33edd672SMark# Provide a "standardized" way to retrieve the CLI args that will 304*33edd672SMark# work with both Windows and non-Windows executions. 305*33edd672SMarkMAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" 306*33edd672SMarkexport MAVEN_CMD_LINE_ARGS 307*33edd672SMark 308*33edd672SMarkWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 309*33edd672SMark 310*33edd672SMarkexec "$JAVACMD" \ 311*33edd672SMark $MAVEN_OPTS \ 312*33edd672SMark $MAVEN_DEBUG_OPTS \ 313*33edd672SMark -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 314*33edd672SMark "-Dmaven.home=${M2_HOME}" \ 315*33edd672SMark "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 316*33edd672SMark ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 317