最近公司将svn迁移到git,而且使用maven管理代码仓库,所以小小的研究了一下,为自动化持续集成做知识准备,以下是分析了maven的命令程序mvn:总体感觉与tomcat的启动脚本startup大同小异#!/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_38
if [ -z "$MAVEN_SKIP_RC" ] ; thenif [ -f /etc/mavenrc ] ; then. /etc/mavenrcfiif [ -f "$HOME/.mavenrc" ] ; then. "$HOME/.mavenrc"fi
fi
#如果环境变量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=false
case "`uname`" inCYGWIN*) 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/Homefiif [[ -z "$JAVA_HOME" && -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ]] ; then## Apple JDKs#export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Homefiif [[ -z "$JAVA_HOME" && -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ]] ; then## Oracle JDKs#export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Homefi           ;;
esac
if [ -z "$JAVA_HOME" ] ; thenif [ -r /etc/gentoo-release ] ; thenJAVA_HOME=`java-config --jre-home`fi
fi
#此处貌似是为了照顾gentoo这个操作系统,特别加的,属于适应各操作系统方面的代码
if [ -z "$M2_HOME" ] ; then## resolve links - $0 may be a link to maven's homePRG="$0"
#$0 ----当前shell名# need this for relative symlinks#test –h File    文件存在并且是一个符号链接(同-L) while [ -h "$PRG" ] ; dols=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG="`dirname "$PRG"`/$link"fidone#这个是排除软链接,找出真实的命令运行目录#如果有童鞋分析过tomcat的startup.sh脚本,就可以发现,上面的脚本基本雷同saveddir=`pwd`M2_HOME=`dirname "$PRG"`/..# make it fully qualifiedM2_HOME=`cd "$M2_HOME" && pwd`cd "$saveddir"# echo Using m2 at $M2_HOME
fi
#cd进入mvn的应用目录
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $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 touched
if $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_HOME
if [ -z "$JAVA_HOME" ]; thenjavaExecutable="`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" ]; thenjavaExecutable="`readlink -f \"$javaExecutable\"`"javaHome="`dirname \"$javaExecutable\"`"javaHome=`expr "$javaHome" : '\(.*\)/bin'`JAVA_HOME="$javaHome"export JAVA_HOMEfifi
fi
#如果没有设置JAVACMD,脚本就会在JAVA_HOME目录下去找
if [ -z "$JAVACMD" ] ; thenif [ -n "$JAVA_HOME"  ] ; thenif [ -x "$JAVA_HOME/jre/sh/java" ] ; then# IBM's JDK on AIX uses strange locations for the executablesJAVACMD="$JAVA_HOME/jre/sh/java"elseJAVACMD="$JAVA_HOME/bin/java"fielseJAVACMD="`which java`"fi
fi
#test –x File  文件存在并且可执行
#javac命令用不了,那就报错了鸟~~~
if [ ! -x "$JAVACMD" ] ; thenecho "Error: JAVA_HOME is not defined correctly."echo "  We cannot execute $JAVACMD"exit 1
fi
#没有定义JAVA_HOME,脚本有自己找不到,就会在这里报错
if [ -z "$JAVA_HOME" ] ; thenecho "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $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} "$@"

转载于:https://blog.51cto.com/vekergu/1688387

[白开水]-maven的命令程序mvn脚本分析相关推荐

  1. mvn Mac Linux 版本,Mac 下 Maven 的命令行安装

    JDK 的安装 系统的"系统偏好设置"中我们可以看到 Java的设置, Java 7(含) 之后的版本在这里可以看到. 点击进去后,可以看到独立的 Java 控制面板 注意,这里是 ...

  2. Maven学习:常用mvn命令

    Maven 在线: Maven库:http://repo2.maven.org/maven2/Maven依赖查询:http://mvnrepository.com/ Maven常用命令: 1. 创建M ...

  3. Linux中使用mvn命令(使用Maven:-bash:mvn:command not fonud)随笔

    最近在用Linux部署一个项目,在构建打包项目的时候使用Maven执行命令的时候,出现了以下错误:命令没有找到:-bash:mvn:command not fonud.这里的原因是初始默认安装jdk时 ...

  4. 【Android 逆向】Android 逆向通用工具开发 ( adb forward 网络端口重定向命令 | PC 端逆向程序主函数分析 )

    文章目录 前言 一.adb forward 网络端口重定向命令 二.PC 端逆向程序主函数分析 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.adb forward 网络端口重定向 ...

  5. Mac IDEA解决Maven项目命令行报错:command not found: mvn

    IDEA项目的maven包位置在:/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3,所以运行: 步骤一:添加环境变量 ...

  6. Maven命令之--mvn help:system

    Maven命令之–mvn help:system mvn help:system命令的主要作用是显示平台详细信息的列表,例如系统属性和环境变量. 首先运行此命令的前提是:正确安装了maven3.0+, ...

  7. 【Android 逆向】Android 系统文件分析 ( 外部存储设备文件 | sbin 命令程序目录 | dev 字符设备目录 )

    文章目录 一.外部存储设备文件 二.sbin 命令程序目录 三.dev 字符设备目录 一.外部存储设备文件 /sdcard 文件是一个链接 , 相当于快捷方式 , 其实际的目录是 /storage/s ...

  8. linux让脚本在指定时间运行程序,如何限制Linux命令程序运行的时间

    1. 前言 本文主要讲解如何限制Linux命令程序运行的时间. Linux提供了大量的命令,每个命令都是唯一的,并且在特定的情况下使用.Linux的目标是帮助您尽可能地高效工作.Linux命令的一个属 ...

  9. maven集成命令-U -B -P -e -X

    maven -U clean compile install -e -X -Dmaven.test.skip=true 在持续集成服务器上使用怎样的 mvn 命令集成项目,这个问题乍一看答案很显然,不 ...

最新文章

  1. batch size 训练时间_深度学习 | Batch Size大小对训练过程的影响
  2. MATLAB常用算法与应用实例分享来袭!
  3. Github Pages + Jekyll 独立博客一小时快速搭建上线指南
  4. java读取复杂csv文件内容_java读取并导出多类型数据csv文件
  5. 金融行业文档管理系统的八大创新
  6. vue 高德轨迹自定义两点之间的颜色_vue 还是 react?这是一个问题
  7. C++求复数的角度_高考数学一轮复习33,复数,常见类型及解题策略
  8. matlab GUI页面 科学计算器代码
  9. js面试题(2019最新)
  10. E001检测到您的环境不支持HTML5,佳能打印机故障代码、故障原因、故障排除
  11. html logo写法,教你用CSS3打造HTML5的Logo
  12. 神级 IDEA 插件,能让你的代码飞起来!
  13. 计算机的软键盘在哪里,如何调出软键盘_怎么在电脑上调出软键盘_如何调出搜狗软键盘-Guide信息网...
  14. java audio 分帧_语音特征参数MFCC提取过程详解
  15. 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
  16. java多态性_深入理解java多态性
  17. 二维数组 Arrays
  18. 时下流行的css3页面纵向滑动效果
  19. 讲真,你绝对是第一次看到如此全面的贴片电阻知识
  20. 拆解八马茶业IPO:门店月均收入不足3万元,关联方没用就抛弃?

热门文章

  1. 斐波纳契回调线_斐波那契回调线(黄金分割线)神级操作-经典
  2. Web Visibilitychange
  3. 判断上三角矩阵 (15 分)
  4. PAT乙级 1006 换个格式输出整数
  5. html + css + js 实现简易计算器
  6. C语言-数据结构-可变长顺序表的初始化,插入和输出
  7. android studio 触摸锁,学习AndroidStudio布局,并编写一个图案解锁demo
  8. msvcrt python linux,Python msvcrt.CrtSetReportMode方法代码示例
  9. JFinalConfig
  10. python爬虫----handler和opener