1. 程式人生 > >Maven: NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher

Maven: NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher

    想在mac本上把程式程式碼也checkout下來。本來先裝的maven 3,但是同步過幾次後出現了問題,因為maven3和maven2的配置檔案要求好像有些不同,遂想重新裝maven2。

    安裝maven時,因為只是需要將maven的包解壓縮後放到相應的位置,再設定相應的幾個環境變數如下:

    M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4

    M2=$M2_HOME/bin

    PATH=$M2:$PATH

    現在想想當時設的時候就是M2,我還去裝了個新的Maven3,也是自找沒事了。。

    本以為簡單地把PATH中的改一下,指向新的apache-maven-2.2.1就行,但是執行mvn eclipse:eclipse時卻出現如下的異常

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher
Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.Launcher
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

    查了後,有一些說是因為在環境變數裡即設了M2_HOME又設了M3_HOME,不過我並沒有設過。再找原因了,終於找到一個合適的解決方案。

    可以檢視一下系統中的這些量。

bash-3.2$ which mvn

/usr/bin/mvn

bash-3.2$ ls -la /usr/bin/mvn

lrwxr-xr-x  1 root  wheel  24 Feb 16 22:54 /usr/bin/mvn -> /usr/share/maven/bin/mvn

bash-3.2$ ls -la /usr/share/maven

lrwxr-xr-x  1 root  wheel  16 Feb 16 22:54 /usr/share/maven -> java/maven-3.0.3

可以看到,這裡連結的還是maven-3.0.3,這看起來似乎是java自動更新連線的,甚至都不是我之前的版本3.0.4……

為了與開發時大家的版本保持一致,重新設定一下

bash-3.2$ cd /usr/share/

bash-3.2$ sudo mv maven maven.temp

bash-3.2$ sudo ln -s /usr/local/apache-maven/apache-maven-2.2.1/ maven

再執行命令檢視版本,搞定

bash-3.2$ mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800)
Java version: 1.6.0_29
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x" version: "10.6.8" arch: "x86_64" Family: "mac"