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