mvn命令,用于构建java项目。这篇文章通过分析mvn脚本,看看mvn命令底层做了什么。
在开始看mvn命令以前,先查了github,有maven的项目,因此maven本身应该是一个java项目。另外,还有intellij-community项目,可以知道这也是一个java项目。
下面正式开始看mvn脚本。
首先进入maven项目的根目录,进入bin目录,可以看到mvn脚本。
cd bin
通过vim打开mvn脚本。
vim mvn
直接到脚本末尾,可以看到是启动一个java命令。
191 exec "$JAVACMD" \
192 $MAVEN_OPTS \
193 $MAVEN_DEBUG_OPTS \
194 -classpath "${CLASSWORLDS_JAR}" \
195 "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
196 "-Dmaven.home=${MAVEN_HOME}" \
197 "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
198 "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
199 ${CLASSWORLDS_LAUNCHER} "$@"
有几个关键的变量,从脚本前面找出来。可以看出 maven使用是plexus-classworlds-*.jar,启动类是org.codehaus.plexus.classworlds.launcher.Launcher
95 JAVACMD="$JAVA_HOME/bin/java"
105 CLASSWORLDS_JAR=echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar
106 CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
到此,mvn命令底层做了什么已经基本清楚。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。