錯誤: 找不到或無法加載主類 org.codehaus.plexus.classworlds.launcher.Launcher 問題排查

1. mac 下面是用homebrew 安裝maven,安裝成功,設置完M2_HOME ,使用mvn -version進行檢測

houenxundeMacBook-Pro:3.3.9 houenxun$ mvn -version
錯誤: 找不到或無法加載主類 org.codehaus.plexus.classworlds.launcher.Launcher

2. 網上看了一堆解決方案,不明所以,於是自己嘗試解決,首先,先定位一下問題的腳本

houenxundeMacBook-Pro:3.3.9 houenxun$ which mvn
/usr/local/bin/mvn
houenxundeMacBook-Pro:3.3.9 houenxun$ ls -l /usr/local/bin/mvn
lrwxr-xr-x  1 houenxun  admin  29  4  7 15:52 /usr/local/bin/mvn -> ../Cellar/maven/3.3.9/bin/mvn

打開mvn文件

#!/bin/bash
JAVA_HOME="${JAVA_HOME:-$(/usr/libexec/java_home)}" exec "/usr/local/Cellar/maven/3.3.9/libexec/bin/mvn" "$@"

可以看到真正調用的是

/usr/local/Cellar/maven/3.3.9/libexec/bin/mvn

打開該文件,文件比較長,定位到最後報錯的地方

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
  "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

使用echo打印真正的語句

exec /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java -classpath /usr/local/Cellar/maven/3.3.9/boot/plexus-classworlds-*.jar -Dclassworlds.conf=/usr/local/Cellar/maven/3.3.9/bin/m2.conf -Dmaven.home=/usr/local/Cellar/maven/3.3.9 -Dmaven.multiModuleProjectDirectory=/usr/local/Cellar/maven/3.3.9/libexec/bin org.codehaus.plexus.classworlds.launcher.Launcher

3. 很奇怪,在/usr/local/Cellar/maven/3.3.9目錄下boot和bin都是不存在的,而卻存在/usr/local/Cellar/maven/3.3.9/libexec目錄下

houenxundeMacBook-Pro:3.3.9 houenxun$ pwd
/usr/local/Cellar/maven/3.3.9
houenxundeMacBook-Pro:3.3.9 houenxun$ ls
INSTALL_RECEIPT.json	NOTICE			bin
LICENSE			README.txt		libexec
houenxundeMacBook-Pro:3.3.9 houenxun$
houenxundeMacBook-Pro:3.3.9 houenxun$ cd libexec/
houenxundeMacBook-Pro:libexec houenxun$ ls
bin	boot	conf	lib
houenxundeMacBook-Pro:libexec houenxun$

4. 嘗試將他們拷貝出去,的確OK了

houenxundeMacBook-Pro:3.3.9 houenxun$ mvn -version
exec /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java -classpath /usr/local/Cellar/maven/3.3.9/boot/plexus-classworlds-2.5.2.jar -Dclassworlds.conf=/usr/local/Cellar/maven/3.3.9/bin/m2.conf -Dmaven.home=/usr/local/Cellar/maven/3.3.9 -Dmaven.multiModuleProjectDirectory=/usr/local/Cellar/maven/3.3.9 org.codehaus.plexus.classworlds.launcher.Launcher -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/Cellar/maven/3.3.9
Java version: 1.8.0_77, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.4", arch: "x86_64", family: "mac"

5. 問題似乎解決了,但不禁奇怪,難道homebrew安裝maven有bug???

我習慣性的設置M2_HOME,爲啥要設置,是要把maven的目錄設置成執行環節目錄,但根據第二步驟

/usr/bin/mvn是mvn命令的符號鏈接,有了這個符號鏈接M2_HOME也就不起作用了。我們嘗試禁用M2_HOME環境變量

houenxundeMacBook-Pro:~ houenxun$ mvn -version
exec /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java -classpath /usr/local/Cellar/maven/3.3.9/libexec/boot/plexus-classworlds-2.5.2.jar -Dclassworlds.conf=/usr/local/Cellar/maven/3.3.9/libexec/bin/m2.conf -Dmaven.home=/usr/local/Cellar/maven/3.3.9/libexec -Dmaven.multiModuleProjectDirectory=/Users/houenxun org.codehaus.plexus.classworlds.launcher.Launcher -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_77, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.4", arch: "x86_64", family: "mac"

依然可以執行,而且boot和lib的路徑也發生變化了!

原來新版本的maven已經不需要配置M2_HOME 環境變量,並且目錄層次結構也發生了變化,但是爲了兼容原來的老版本,腳本中通過M2_HOME來選擇新舊目錄層次,哎,自己畫蛇添足了!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章