Назад | Перейти на главную страницу

Tomcat не распознает библиотеку MySQL .jar

Я пробовал несколько разных способов, чтобы Tomcat загружал драйверы MySQL при запуске моего веб-приложения. Я использую Ubuntu 8.04, а библиотеки взяты из пакета libmysql-java. Они расположены в каталоге, показанном ниже:

~$ ls /usr/share/java/mysql*
/usr/share/java/mysql-connector-java-5.1.5.jar

Мой CLASSPATH включает этот файл:

~$ echo $CLASSPATH
.:/usr/lib/jvm/java-6-sun/bin:/usr/local/tomcat/lib/servlet-api.jar:/usr/share/java/mysql-connector-java-5.1.5.jar

Я даже поместил копию файла .jar в каталог WEB-INF / lib / своего веб-приложения:

/usr/local/tomcat/webapps/ohms/WEB-INF/lib$ ls
mysql-connector-java-5.1.5.jar

После внесения этих изменений я перезапускаю Tomcat, повторно компилирую свои классы, снова перезапускаю Tomcat. Также я импортирую необходимые библиотеки, используя import java.sql.*;

Однако я все еще получаю java.lang.ClassNotFoundException: com.mysql.jdbc.Driver ошибка при запуске линии Class.forName("com.mysql.jdbc.Driver").newInstance();

Что я здесь делаю не так?

Tomcat не использует CLASSPATH в загрузчике классов веб-приложения. Вы можете добавлять пути и файлы в common.loader линия в conf/catalina.properties. Загрузчик классов должен был найти класс, когда jar находился в WEB-INF / lib. Я не могу объяснить, почему этого не произошло. Если вы используете 5.5, вы можете разместить банку в common / lib или lib /, если вы используете tomcat6. Этот путь загружается загрузчиком классов более высокого уровня и должен быть выбран первым.

Это ваше приложение генерирует исключение или это сам Tomcat?

Поскольку вы используете Class.forName (), я предполагаю, что вы также не делаете конфигурацию JNDI в самом Tomcat, но я все равно выброшу эту возможность. Для JNDI Tomcat также должен видеть драйвер, и он не может видеть JAR-файлы, которые вы помещаете в каталог WEB-INF / lib вашего приложения. Если вы поместите свой драйвер в общий каталог lib Tomcat, Tomcat сможет его увидеть, как и ваше приложение. Директории - это те, которые упоминает Дэвид.