1. 程式人生 > >MyEclipse中分別通過buildpath和lib匯入jar包的區別

MyEclipse中分別通過buildpath和lib匯入jar包的區別

第一篇博文 紀念一下 我這個記性實在不好 所以以後會把學習中遇到的問題和解決的辦法記在這裡 聚沙成塔 積水成淵吧 csdn和這裡都有部落格 希望能與更多人交流吧

這個問題早就發現了 但今天想搞清楚是為什麼
今天寫一個小專案 通過buildpath匯入MySQL的驅動jar包 結果編譯沒問題 執行出錯 (而且在.classpath檔案裡面是有我引入jar包的路徑的)
java.lang.ClassNotFoundException:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1116)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:662)
 然後又把JAR包複製到了WEBROOT 裡面的 lib目錄下 結果可以了 
但如果只把JAR包放在lib資料夾下 那我用到的jar的程式碼  直接就會沒法通過編譯(找不到包)
就是說 二者缺一不可 這是為什麼呢?這兩種方式究竟有什麼區別?
在網上找了一下 也沒發現原因  比較權威的說法是這兩種匯入沒什麼區別 很奇怪 搞到三點我就去睡了



今天起來 跟群裡的人討教這個問題 然後無意間想起了 我部署TOMCAT用的是修改server.xml檔案這個方法
 不是用MyEclipse的自動部署 也就是我在server.xml檔案裡面加上 path 和docBase
比如 <Context path="/vote" docBase="D:\My Documents\Workspaces\MyEclipse 8.6\VotingSystem\WebRoot" reloadable="true" />  這樣在瀏覽器裡敲localhost:8080/vote 就相當於直接訪問我docBase所指定的路徑 
而MyEclipse自動部署的時候 會把工程複製到tomcat的webapps目錄下面 同時會把用buildpath引入的jar包 自動放在lib裡面 

所以如果用MyEclipse部署tomcat的話 這兩種匯入JAR包的方式是沒區別的 但我這種部署的方法 他不會自動把jar包複製到lib下面 所以就出現了這個問題
現在想想 對於我這種方法來說 buildpath的引入能保證寫程式碼的時候不會出編譯問題 但是由於tomcat執行是會在他的lib目錄下面找相應的JAR包 所以執行的時候會出classnotfoundexcption