2011-11-23 47 views
3

行家的pom.xml拋出java.lang.ClassNotFoundException:com.mysql.jdbc.Driver(行家+的JBoss)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>Test</groupId> 
<artifactId>Test</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 

<name>Test</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.18</version> 
    </dependency> 
</dependencies> 

在代碼林試圖執行Class.forName("com.mysql.jdbc.Driver")

我得到這個:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

但我檢查我的mysql.jar在jboss-as-7.0.2.Final\standalone\deployments\Test.war\WEB-INF\lib,它有com.mysql.jdbc.Driver類。

+3

的'servlet的api'依賴應該被標記爲'provided',順便說一句。 –

+0

在'..WEB-INF \ lib'中有'mysql.jar'文件的確切名稱是什麼? –

+0

@DᴀᴠᴇNᴇᴡᴛᴏɴThx,我不知道,我會嘗試。@ ring bearer mysql-connector-java-5.1.18.jar – itun

回答

4

通常情況下,您不應該在您的war文件中包含JDBC驅動程序。

我建議你按提供的標記驅動程序並將其添加到服務器的lib目錄中。

PS。我不知道爲什麼你會在你的代碼中使用

Class.forName("com.mysql.jdbc.Driver") 

。爲什麼不讓容器管理你的連接和交易?

+0

對於JBoss AS7來說,服務器上沒有lib目錄,所以這個答案也不能解決它。正確的方法是使用容器提供的數據源。 – eis

1

發生此錯誤是因爲您的mysql jar不在您的運行時類路徑中。如果您正在使用maven,

  1. 的 「部署大會」
  2. 點擊 「添加...」
  3. 選擇的 「Java構建路徑條目」 打開你的EAR/Web項目的屬性
  4. 點擊
  5. 點擊 「下一步」
  6. 選擇 「Maven依賴」
  7. 單擊 「完成」
0

看來你使用的是JBoss AS7。檢查說明這裏:https://community.jboss.org/wiki/DataSourceConfigurationInAS7

基本上,你應該

  1. 安裝MySQL Connector
  2. 使用使用JNDI配置

類是

  • 請參閱該數據源創建數據源。 forName()是數據源未由容器提供時常用的習慣用法。在現代Java EE服務器中,提供了它們。

  • 0

    我有一個稍微不同的用例。我在獨立應用程序中使用apache的BasicDataSource。

    我得到這個例外,因爲我打電話setDriverClassNamecom.mysql.jdbc.Driver.class.toString()代替"com.mysql.jdbc.Drive"作爲一個String(所以編譯時檢查,確保沒有錯字或驅動程序的位置,在版本升級沒有改變...等)。

    但是!

    當你駕駛它的實施有一個靜態初始化塊:

    static { 
        try { 
        java.sql.DriverManager.registerDriver(new Driver()); 
        } catch (SQLException E) { 
        throw new RuntimeException("Can't register driver!"); 
        } 
    } 
    

    當我寫com.mysql.jdbc.Driver.class.toString()太早執行,造成後來誤導ClassNotFoundException這個初始化塊拋出。一旦我切換到"com.mysql.jdbc.Driver"我的應用程序開始工作。

    這是一個情況下,在靜態時變得邪惡 :)

    相關問題