[白开水]-maven的命令程序mvn脚本分析
最近公司将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脚本分析相关推荐
- mvn Mac Linux 版本,Mac 下 Maven 的命令行安装
JDK 的安装 系统的"系统偏好设置"中我们可以看到 Java的设置, Java 7(含) 之后的版本在这里可以看到. 点击进去后,可以看到独立的 Java 控制面板 注意,这里是 ...
- Maven学习:常用mvn命令
Maven 在线: Maven库:http://repo2.maven.org/maven2/Maven依赖查询:http://mvnrepository.com/ Maven常用命令: 1. 创建M ...
- Linux中使用mvn命令(使用Maven:-bash:mvn:command not fonud)随笔
最近在用Linux部署一个项目,在构建打包项目的时候使用Maven执行命令的时候,出现了以下错误:命令没有找到:-bash:mvn:command not fonud.这里的原因是初始默认安装jdk时 ...
- 【Android 逆向】Android 逆向通用工具开发 ( adb forward 网络端口重定向命令 | PC 端逆向程序主函数分析 )
文章目录 前言 一.adb forward 网络端口重定向命令 二.PC 端逆向程序主函数分析 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.adb forward 网络端口重定向 ...
- Mac IDEA解决Maven项目命令行报错:command not found: mvn
IDEA项目的maven包位置在:/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3,所以运行: 步骤一:添加环境变量 ...
- Maven命令之--mvn help:system
Maven命令之–mvn help:system mvn help:system命令的主要作用是显示平台详细信息的列表,例如系统属性和环境变量. 首先运行此命令的前提是:正确安装了maven3.0+, ...
- 【Android 逆向】Android 系统文件分析 ( 外部存储设备文件 | sbin 命令程序目录 | dev 字符设备目录 )
文章目录 一.外部存储设备文件 二.sbin 命令程序目录 三.dev 字符设备目录 一.外部存储设备文件 /sdcard 文件是一个链接 , 相当于快捷方式 , 其实际的目录是 /storage/s ...
- linux让脚本在指定时间运行程序,如何限制Linux命令程序运行的时间
1. 前言 本文主要讲解如何限制Linux命令程序运行的时间. Linux提供了大量的命令,每个命令都是唯一的,并且在特定的情况下使用.Linux的目标是帮助您尽可能地高效工作.Linux命令的一个属 ...
- maven集成命令-U -B -P -e -X
maven -U clean compile install -e -X -Dmaven.test.skip=true 在持续集成服务器上使用怎样的 mvn 命令集成项目,这个问题乍一看答案很显然,不 ...
最新文章
- batch size 训练时间_深度学习 | Batch Size大小对训练过程的影响
- MATLAB常用算法与应用实例分享来袭!
- Github Pages + Jekyll 独立博客一小时快速搭建上线指南
- java读取复杂csv文件内容_java读取并导出多类型数据csv文件
- 金融行业文档管理系统的八大创新
- vue 高德轨迹自定义两点之间的颜色_vue 还是 react?这是一个问题
- C++求复数的角度_高考数学一轮复习33,复数,常见类型及解题策略
- matlab GUI页面 科学计算器代码
- js面试题(2019最新)
- E001检测到您的环境不支持HTML5,佳能打印机故障代码、故障原因、故障排除
- html logo写法,教你用CSS3打造HTML5的Logo
- 神级 IDEA 插件,能让你的代码飞起来!
- 计算机的软键盘在哪里,如何调出软键盘_怎么在电脑上调出软键盘_如何调出搜狗软键盘-Guide信息网...
- java audio 分帧_语音特征参数MFCC提取过程详解
- 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
- java多态性_深入理解java多态性
- 二维数组 Arrays
- 时下流行的css3页面纵向滑动效果
- 讲真,你绝对是第一次看到如此全面的贴片电阻知识
- 拆解八马茶业IPO:门店月均收入不足3万元,关联方没用就抛弃?
热门文章
- 斐波纳契回调线_斐波那契回调线(黄金分割线)神级操作-经典
- Web Visibilitychange
- 判断上三角矩阵 (15 分)
- PAT乙级 1006 换个格式输出整数
- html + css + js 实现简易计算器
- C语言-数据结构-可变长顺序表的初始化,插入和输出
- android studio 触摸锁,学习AndroidStudio布局,并编写一个图案解锁demo
- msvcrt python linux,Python msvcrt.CrtSetReportMode方法代码示例
- JFinalConfig
- python爬虫----handler和opener