簡體   English   中英

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

[英]java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

我正在構建Maven Java Web應用程序

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

我明白了

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

mysql-connector像這樣添加到我的pom.xml文件中

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
    <scope>provided</scope>
</dependency>

但我一直這樣做。 我甚至嘗試下載mysql-connector並手動將其添加到項目中,但它不會改變任何東西。

我也有沒有Maven的相同應用程序,相同的代碼工作正常

您已根據provided設置了依賴項的范圍。 這意味着在編譯項目時使用jar(雖然你不應該需要它來編譯它,因為你應該只使用標准的JDBC類),但是它不包含在jar或構建創建的war中,因為這依賴性應該由部署應用程序的應用程序服務器“提供”。

所以,要么你實際上打算提供這個jar,它應該在應用程序服務器的類路徑中,或者你想將這個jar與應用程序捆綁在一起,它應該有范圍runtime (因為你需要它來運行應用程序,但不是編譯它),而不是provided

您需要添加Heroku插件作為maven依賴項以獲取在heroku中添加的maven依賴項。

部署獨立應用程序

<build>
  <plugins>
    <plugin>
      <groupId>com.heroku.sdk</groupId>
      <artifactId>heroku-maven-plugin</artifactId>
      <version>2.0.1</version>
      <configuration>
        <appName>${heroku.appName}</appName>
        <processTypes>
          <web>java $JAVA_OPTS -cp target/classes:target/dependency/* Main</web>
        </processTypes>
      </configuration>
    </plugin>
  </plugins>
</build>

現在,如果您安裝了Heroku Toolbelt,請運行:

$ mvn heroku:deploy

部署WAR文件

<build>
  <plugins>
    <plugin>
      <groupId>com.heroku.sdk</groupId>
      <artifactId>heroku-maven-plugin</artifactId>
      <configuration>
        <appName>${heroku.appName}</appName>
      </configuration>
    </plugin>
  </plugins>
</build>

現在,如果您安裝了Heroku Toolbelt,請運行:

$ mvn heroku:deploy-war

很簡單,你可以解決你的問題。 這不是編譯問題,顯然是運行時問題,您必須在系統類路徑中添加jar文件。 如果您的包是.war.ear格式,您可以通過將maven配置從<scope>provided</scope>更改為<scope>local</scope> 此更正將jar添加到您的本地lib文件夾/目錄。

這肯定會解決您的問題。

我喜歡上面的答案。 我使用帶有java的-cp或-classpath開關在我的Windows 10機器上解決了同樣的問題。 但最后,因為我希望com.mysql.jdbc.Driver可用於我所有的runnable類,所以我只是在機器的環境變量列表中創建了CLASSPATH環境變量。 您必須確保並添加當前目錄路徑。 在命令提示符下發出命令“java MainClassName”時,JVM無法找到[主函數]類。

我使用eclipse並將外部jar文件添加到項目很容易,並且項目在IDE中運行正常而沒有定義CLASSPATH變量,但是如果沒有定義CLASSPATH變量,它們仍然不能在命令提示符窗口中運行。 我還發現,使用UcanAccess [JE 8及更高版本的ODBC解決方案]驅動程序我必須在CLASSPATH變量中包含所有5個jar文件。

我還沒有嘗試構建一個可執行的jar文件,看看我是否需要CLASSPATH變量。 這是我要檢查的下一個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM