千家信息网

maven中mvn脚本的示例分析

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,小编给大家分享一下maven中mvn脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!#!/bin/sh# --
千家信息网最后更新 2025年01月23日maven中mvn脚本的示例分析

小编给大家分享一下maven中mvn脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

#!/bin/sh# ----------------------------------------------------------------------------# 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.# ----------------------------------------------------------------------------# ----------------------------------------------------------------------------# Maven2 Start Up Batch script## Required ENV vars:# ------------------#   JAVA_HOME - location of a JDK home dir## Optional ENV vars# -----------------#   M2_HOME - location of maven2's installed home dir#   MAVEN_OPTS - parameters passed to the Java VM when running Maven#     e.g. to debug Maven itself, use#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files# ----------------------------------------------------------------------------#如果系统里有多JDK版本,就可以在这里指定JAVA_HOME,这样即使JAVA_HOME环境变量不是这个,也可以从这里弥补#M2_HOME 也可以在这里指定,maven会在家目录生成.m2目录#MAVEN_OPTS 这个是设maven启动参数的,有兴趣的同学可以研究下JAVA_HOME=/usr/java/jdk1.6.0_38if [ -z "$MAVEN_SKIP_RC" ] ; then  if [ -f /etc/mavenrc ] ; then    . /etc/mavenrc  fi  if [ -f "$HOME/.mavenrc" ] ; then    . "$HOME/.mavenrc"  fifi#如果环境变量MAVEN_SKIP_RC存在,则从下面3个外部文件找是否设置maven的环境变量,#下面是系统环境检查,和tomcat的startup.sh一曲同工# OS specific support.  $var _must_ be set to either true or false.cygwin=false;darwin=false;mingw=falsecase "`uname`" in  CYGWIN*) cygwin=true ;;  MINGW*) mingw=true;;  Darwin*) darwin=true                       #           # Look for the Apple JDKs first to preserve the existing behaviour, and then look           # for the new JDKs provided by Oracle.           #            if [[ -z "$JAVA_HOME" && -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ]] ; then             #             # Apple JDKs             #             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home           fi                      if [[ -z "$JAVA_HOME" && -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ]] ; then             #             # Apple JDKs             #             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home           fi                        if [[ -z "$JAVA_HOME" && -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ]] ; then             #             # Oracle JDKs             #             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home           fi                      ;;esacif [ -z "$JAVA_HOME" ] ; then  if [ -r /etc/gentoo-release ] ; then    JAVA_HOME=`java-config --jre-home`  fifi#此处貌似是为了照顾gentoo这个操作系统,特别加的,属于适应各操作系统方面的代码if [ -z "$M2_HOME" ] ; then  ## resolve links - $0 may be a link to maven's home  PRG="$0"#$0 ----当前shell名  # need this for relative symlinks  #test -h File    文件存在并且是一个符号链接(同-L)   while [ -h "$PRG" ] ; do    ls=`ls -ld "$PRG"`    link=`expr "$ls" : '.*-> \(.*\)$'`    if expr "$link" : '/.*' > /dev/null; then      PRG="$link"    else      PRG="`dirname "$PRG"`/$link"    fi  done  #这个是排除软链接,找出真实的命令运行目录  #如果有童鞋分析过tomcat的startup.sh脚本,就可以发现,上面的脚本基本雷同      saveddir=`pwd`  M2_HOME=`dirname "$PRG"`/..  # make it fully qualified  M2_HOME=`cd "$M2_HOME" && pwd`  cd "$saveddir"  # echo Using m2 at $M2_HOMEfi#cd进入mvn的应用目录# For Cygwin, ensure paths are in UNIX format before anything is touchedif $cygwin ; then  [ -n "$M2_HOME" ] &&    M2_HOME=`cygpath --unix "$M2_HOME"`  [ -n "$JAVA_HOME" ] &&    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`  [ -n "$CLASSPATH" ] &&    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`fi# For Migwn, ensure paths are in UNIX format before anything is touchedif $mingw ; then  [ -n "$M2_HOME" ] &&    M2_HOME="`(cd "$M2_HOME"; pwd)`"  [ -n "$JAVA_HOME" ] &&    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"  # TODO classpath?fi#上面一大串都是适应mingw和cygwin环境的,直接略过,下面才是干货#test -z 字符串 字符串的长度为零  #如果没有设置JAVA_HOME,程序就自己去找JAVA_HOMEif [ -z "$JAVA_HOME" ]; then  javaExecutable="`which javac`"  if [ -n "$javaExecutable" -a ! "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then  #test -n 字符串的长度非零   #test 表达式1 -a 表达式2  两个表达式都为真     #link=`expr "$ls" : '.*-> \(.*\)$'` 模拟后: expr 'lrwxrwxrwx 1 root root 19 3月  17 10:12 ./bbb.sh -> /root/shell/test.sh' : '.*-> \(.*\)$'    #很明确的发现是用expr来提取/root/shell/test.sh的内容    #而这个循环就可以明确其目的,排除命令为链接,找出命令真正的目录,防止后面的命令出错     # readlink(1) is not available as standard on Solaris 10.        #[^]            # 匹配不在指定组内的字符        #上面的判读,主要是判断which javac,是否存在....    readLink=`which readlink`    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then      javaExecutable="`readlink -f \"$javaExecutable\"`"      javaHome="`dirname \"$javaExecutable\"`"      javaHome=`expr "$javaHome" : '\(.*\)/bin'`      JAVA_HOME="$javaHome"      export JAVA_HOME    fi  fifi#如果没有设置JAVACMD,脚本就会在JAVA_HOME目录下去找if [ -z "$JAVACMD" ] ; then  if [ -n "$JAVA_HOME"  ] ; then    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then      # IBM's JDK on AIX uses strange locations for the executables      JAVACMD="$JAVA_HOME/jre/sh/java"    else      JAVACMD="$JAVA_HOME/bin/java"    fi  else    JAVACMD="`which java`"  fifi#test -x File  文件存在并且可执行 #javac命令用不了,那就报错了鸟~~~if [ ! -x "$JAVACMD" ] ; then  echo "Error: JAVA_HOME is not defined correctly."  echo "  We cannot execute $JAVACMD"  exit 1fi#没有定义JAVA_HOME,脚本有自己找不到,就会在这里报错if [ -z "$JAVA_HOME" ] ; then  echo "Warning: JAVA_HOME environment variable is not set."fiCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher# For Cygwin, switch paths to Windows format before running javaif $cygwin; then  [ -n "$M2_HOME" ] &&    M2_HOME=`cygpath --path --windows "$M2_HOME"`  [ -n "$JAVA_HOME" ] &&    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`  [ -n "$CLASSPATH" ] &&    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`fi#上面一堆代码的目的,就是为了下面一句代码提供变量.....exec "$JAVACMD" \  $MAVEN_OPTS \  -classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \  "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \  "-Dmaven.home=${M2_HOME}"  \  ${CLASSWORLDS_LAUNCHER} "$@"

以上是"maven中mvn脚本的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0