1. 程式人生 > >解決Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler

解決Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler

在使用maven-shade-plugin外掛時,報個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
        at com.waylau.lite.App.main(App.java:13)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.Handler
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

這個錯誤,在eclispe裡面右鍵允許應用是不會有的。但使用maven-shade-plugin外掛打包為可執行的jar時出現了。

問題原因

仔細排查了pom.xml檔案發現了問題:

<dependency>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-servlet</artifactId>
	<version>${jetty.version}</version>
	<scope>provided</scope>
</dependency>

在引用jetty-servlet時,scope設定為了provided,意味著打包時,這個依賴不會被打進去。
要想不報錯,只要把這個依賴打包進去jar即可。

解決方法

修改如下解決:

<dependency>
	<groupId>org.eclipse.jetty</groupId>
	<artifactId>jetty-servlet</artifactId>
	<version>${jetty.version}</version>
</dependency
>

原始碼