maven中mvn脚本的示例分析
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下maven中mvn脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!#!/bin/sh# --
千家信息网最后更新 2026年10月31日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脚本的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
脚本
目录
命令
环境
变量
字符
系统
分析
代码
内容
字符串
文件
篇文章
表达式
链接
示例
操作系统
目的
长度
面的
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新华互联网科技
广东猪兼强互联网科技有限公司
哈尔滨大商圈互联网科技有限公司
互联网科技深圳
广州宏创互联网科技
艾特科技互联网
亿账通互联网科技
长亮科技 互联网金融
一五八零互联网科技
左右互联网络科技
深圳互联网科技怎么样
互联网汽车科技小镇
互联网科技教育视频
现代互联网科技股
成都互联网科技公司工作好不好
中科明德北京互联网科技
广州千川互联网科技有限公司
工业互联网科技成果转化
卡尔迅互联网科技有限公司
银川新华互联网科技学校是国营吗
中国互联网科技股
疫情对互联网科技公司影响
互联网科技资迅
撒么互联网科技公司
昭通互联网科技选哪家
科技类公司包括互联网吗
燊美集互联网科技有限公司
四川慕妮娅互联网科技有限公司
广州百诚互联网科技有限公司官网
东营紫格互联网科技