2011-11-12 130 views
7

運行tomcat'java.lang.ClassNotFoundException:com.mysql.jdbc.Driver'時出現此錯誤。我正在使用Eclipse(Indigo,J2EE版本)/ Maven(m2e-wtp)/ Tomcat 7.0的組合。我已經將這個依賴關係包含在我的web應用程序的pom文件中(從頭開始構建)。運行時java.lang.ClassNotFoundException:com.mysql.jdbc.Driver(eclipse/maven/tomcat)

<dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

我沒有得到任何編譯錯誤的「問題」的看法,但我從「服務器」視圖運行Tomcat服務器,我得到這些錯誤。它清楚地表明Tomcat無法找到類,它是類路徑配置錯誤,我希望maven能夠處理這個問題。

我查看了與'java.lang.ClassNotFoundException:com.mysql.jdbc.Driver'相關的其他問題,但沒有多大幫助。

我將不勝感激任何幫助。

/**這是我如何加載驅動程序*/

static { 
     DriverAdapterCPDS cpds_Customer = new DriverAdapterCPDS(); 
     try {      cpds_Customer.setDriver(productConfig.getProperty("dbcp.connection.customer.driver_class")); 

     } catch (ClassNotFoundException e) { 
      // log.error("setDriver Exception " + e); 
      e.printStackTrace(); 
     } 
       } 
+1

您是否還在Tomcat lib文件夾中複製了mysql連接器jar文件? – Tudor

+0

感謝您的快速響應。我沒有嘗試它,因爲我希望maven可以通過將必需的jar複製到WebContent/WEB-INF/lib或放置它們的位置來照顧所有的jar依賴項。我想明確這麼做嗎?我會嘗試更新線程。 – user977505

+0

Tudor和duffymo建議您將驅動程序複製到tomcat的lib目錄($ CATALINA_HOME/lib)中,而不是在Web應用程序li​​b目錄中。 – stivlo

回答

18

的Tomcat 7條規定,JDBC驅動程序的JAR文件必須在它的/ lib目錄中去:

http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

搜索單詞「忘記」。

+0

那麼pom.xml中的範圍呢?默認的編譯範圍也會將它打包在戰爭中,這是否會成爲問題? – stivlo

+0

只有當您使用jdni資源查找來查找數據源時,這纔可能是真實的情況。如果不是它實際上是一個不好的建議,應該避免它,因爲它會污染全局lib目錄,而只有一個web應用程序需要庫,並且在未部署的情況下不會被刪除。 – soulcheck

+0

這非常關鍵。過去,當我在其他版本的Tomcat上工作時,我沒有明確地複製它,我忽略了這個版本(Tomcat 7.0)。我也會嘗試更改pom中的作用域,看看是否有助於避免顯式複製到/ lib目錄中。 – user977505

2

確保驅動程序實際上被複制到您的webapp WEB-INF/lib目錄,並且將wtp deploy dir(類似於/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/你的工作區)。

我發現maven-wtp集成比完美更糟糕,因爲我經常偶然發現這個問題。

+0

我該怎麼做?通過更改mysql連接器jar的maven依賴項的範圍或手動複製它? – user977505

+0

我沒有使用JNDI。我更新了關於如何加載驅動程序的文章。 – user977505

+0

我只能通過手動複製來完成它。也許有更好的解決方案。如果是這樣,我會有興趣知道它。 – soulcheck

-1

此錯誤:拋出java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

你需要 「進口com.mysql.jdbc.Driver;」即使它沒有用到應用程序運行。

相關問題