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

时间:2014-08-24 12:44:13

标签: java mysql maven heroku jdbc

我正在构建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的相同应用程序,相同的代码工作正常

4 个答案:

答案 0 :(得分:19)

您已将依赖关系的范围设置为provided。这意味着在编译项目时会使用jar(虽然你不应该需要它来编译它,因为你应该只使用标准的JDBC类),但它不包含在jar或war中通过构建,因为这种依赖应该是&#34;提供&#34;由部署应用程序的应用程序服务器。

所以,你实际上打算提供这个jar,它应该在应用程序服务器的类路径中,或者你想将这个jar与应用程序捆绑在一起,它应该有范围{{1} (因为你需要它来运行应用程序,而不是编译它),而不是runtime

答案 1 :(得分:2)

您需要添加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

答案 2 :(得分:1)

很简单,你可以解决你的问题。这不是编译问题,显然是运行时问题,您必须在系统类路径中添加jar文件。如果您的软件包采用.war.ear格式,则可以通过将maven配置从<scope>provided</scope>更改为<scope>local</scope>来解决此问题。此更正将jar添加到您的本地lib文件夹/目录。

这肯定会解决您的问题。

答案 3 :(得分:1)

我喜欢上面的答案。我使用带有java的-cp或-classpath开关在我的Windows 10机器上解决了同样的问题。但最后,因为我希望com.mysql.jdbc.Driver可用于我所有的runnable类,所以我只是在机器的环境变量列表中创建了CLASSPATH环境变量。您必须确保并添加当前目录路径。在列表中,当您发出命令&#34; java MainClassName&#34;时,JVM无法找到[主函数]的类。在命令提示符下。

我正在使用eclipse并将外部jar文件添加到项目中很简单,项目在IDE中运行正常,没有定义CLASSPATH变量,但它们仍然没有在没有CLASSPATH变量的命令提示符窗口中运行定义。我还发现,使用UcanAccess [JE 8及更高版本的ODBC解决方案]驱动程序,我必须在CLASSPATH变量中包含所有5个jar文件。

我还没有尝试构建一个可执行的jar文件,看看我是否需要CLASSPATH变量。这是我要检查的下一个项目。