我正在开发一个 Java EE 项目(下面的配置),我面临着一个似乎是常规异常的情况:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
.
我正在使用 Eclipse、嵌入式 Tomcat 7 和 Maven,即使找到了用于测试的驱动程序,Tomcat 也找不到它。
我搜索了一些答案1、2和3但建议不清楚:建议将 更改mysql-connector-java
为provided
,并手动复制服务器中的依赖项(不清楚如何)。
但是我不明白为什么我应该排除部署的依赖项(范围provided
)并手动添加它,这不是矛盾吗?
阅读Maven 文档后,我觉得运行环境需要依赖,因此compile
范围最适合。
正如你所看到的,我正试图弄清楚这些事情,所以我宁愿有一个解释而不是一个神奇的修复。
配置:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
数据库属性:
URL = jdbc:mysql://127.0.0.1:3306/XXX-db?zeroDateTimeBehavior=convertToNull
USERBD = XXX
PASSWORDBD = XXX
DRIVER = com.mysql.jdbc.Driver
属性加载:
static {
try {
Properties databaseProperties = new Properties();
InputStream inputStream = DatabaseConnection.class.getClassLoader()
.getResourceAsStream(PROPERTIES_FILE);
if (inputStream != null) {
databaseProperties.load(inputStream);
} else {
throw new FileNotFoundException(
"property file '" + PROPERTIES_FILE + "' not found in the classpath");
}
Class.forName(databaseProperties.getProperty("DRIVER"));
USERBD = databaseProperties.getProperty("USERBD");
PASSWORDBD = databaseProperties.getProperty("PASSWORDBD");
URL = databaseProperties.getProperty("URL");
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}