解決Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
阿新 • • 發佈:2018-12-20
在使用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 >
原始碼
- 原始碼可見 https://github.com/waylau/lite
- 參考《Spring 5 開發大全》