我正在构建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的相同应用程序,相同的代码工作正常
答案 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变量。这是我要检查的下一个项目。