Ошибки файла Java Lib - PullRequest
       13

Ошибки файла Java Lib

0 голосов
/ 27 апреля 2010

Я совершенно новый Java-разработчик (я работал на asp.net), и я унаследовал проект, который пытаюсь запустить правильно. Я на Windows 7 и Tomcat установлен, и я использую Eclipse

Я пытаюсь выяснить, как, чёрт возьми, Джар работает в Java, и я в настоящий момент растерялся. Я играл с этим и искал вещи в Интернете в течение дня, и вот где я нахожусь:

У меня есть динамический веб-проект, который я унаследовал, и он, как я предполагаю, является довольно стандартным макетом проекта. В корневом каталоге проекта есть папка lib, в которой содержатся файлы jar.

Если я ничего не делаю и захожу на определенную страницу сайта, я получаю такую ​​ошибку: «Не удается разрешить импорт net.sf, невозможно разрешить тип XLSTransformer»

Поэтому я добавил jxls-core-0.9.8.jar в путь сборки в Eclipse, и эта ошибка исчезла, но теперь я получаю эту ошибку "java.lang.ClassNotFoundException: net.sf.jxls.transformer.XLSTransformer"

Я скопировал этот jar из его текущего местоположения в каталог tomcat / lib, и эта ошибка исчезла. Теперь я получаю ту же проблему с другим файлом.

В основном мне просто нужно знать, как должна работать баночка? Должны ли они быть в пути к классам, в web / WEB-INF / lib, в tomcat / lib, во всех них, ни один из которых я просто не могу понять.

Также, когда я осматривался, я увидел кое-что, что указывало на порядок записей моего пути к классам. Если это так, как вы застрахуете их в правильном порядке.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2010

Вот предложение, которое может помочь в устранении проблемы.

Файлы WAR (веб-архивы) поместят все JAR-файлы зависимостей вашего приложения в каталог WEB-INF / lib. Если вы получили отчет о пропавшем классе, попробуйте разархивировать файл WAR или заглянуть в разорванный каталог webapp вашего сервера приложений и посмотреть, есть ли необходимый jar.

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

Если ваш JAR отсутствует в WEB-INF / lib, проверьте ваши сценарии сборки или путь сборки вашего проекта в Eclipse. Удачи!

0 голосов
/ 30 апреля 2010

В Eclipse я экспортирую как «Runnable JAR-файл», а в диалоговом окне после «Обработка библиотек» выбираю «Извлечь необходимые библиотеки в сгенерированный Jar».

По сути, это означает, что, если я смогу запустить его в Eclipse без ошибок, он тоже будет работать автономно, поскольку все, что я сказал Eclipse, будет включено в JAR.

0 голосов
/ 27 апреля 2010

От того, где ваши банки должны идти, зависит, на самом деле, целая передовая практика и серьезные головные боли. Термин Jar Hell существует по причине.

Все классы, используемые вашим приложением, должны находиться в пути к классам. Как они туда попадают, будет зависеть от classloader .

Для более полного понимания, вы захотите читать на Java classloader . В идеале вы захотите взглянуть на classloader Tomcat или хотя бы на загрузчик классов Servlet Container, так как загрузчик классов для Tomcat будет отличаться от загрузчика приложений Java SE (для настольных компьютеров) и будет отличаться от такового для апплета. , Кроме того, загрузчики классов могут действительно кусать вас, если вы их не понимаете. Если вы хотите узнать подробности о том, как должен работать контейнер сервлетов, вы можете ознакомиться с последней и самой лучшей спецификацией сервлета .

Информация о загрузчике классов Tomcat предоставляет список лучших практик для вас. Обратите внимание, что я связал версию 5.5. Если вы используете более позднюю или более раннюю версию, проверьте тот же файл для вашей версии.

...