Вложенный Jar с java-апплетом

#java #applet #apache-tika

#java #апплет #апачи-тика

Вопрос:

Прежде всего, я рассмотрел здесь все вопросы, касающиеся включения файлов jar для апплета. Но даже тогда у меня есть эта «огромная» проблема.

Я разрабатываю приложение с использованием Java и библиотеки Apache-Tika (с 4 банками общим размером 40 Мб). Приложению необходимо подсчитать количество слов в загруженном документе (doc, docx, odf, pdf и куча других). Апплет довольно хорошо работает с Netbeans 6.5 или Eclipse IDE, которые я использую параллельно для разработки. Но когда я пытаюсь развернуть его в браузере, возникает проблема.

Проблема

Начальная страница загружается довольно хорошо. Но когда я указываю путь к документу и нажимаю Ok (или Count), я получаю множество сообщений об ошибках. Все это «Исключения, не обнаруженные в классе«, связанные с внешней библиотекой Apache-Tika. Я думаю, что я правильно выполнил все включения библиотеки, так как в противном случае она не будет запускаться в программе просмотра апплетов.

Что касается HTML, я создал jar всего приложения Word-Counter вместе с библиотекой (4 Apache-Tika Jar) и всеми другими необходимыми файлами и соответствующим образом включил jar в тег. Нужно ли мне упоминать что-либо в HTML-файле о вложенной библиотеке jar, есть ли ограничение в отношении вложенной jar? Любая помощь будет высоко оценена. Заранее благодарю вас, образованные люди.

Комментарии:

1. «вложенная библиотека jar» , если под этим вы подразумеваете «Jar внутри Jar», это не сработает. JRE не предназначен для работы с архивами внутри других архивов — для этого потребуется пользовательский загрузчик классов (что возможно в доверенном апплете).

2. Можно ли ожидать, что ваш пользователь будет запускать подключаемый модуль 2 (например, Oracle 1.6.0_10 ) JRE? Это позволило бы отложить загрузку Jar и изолированный доступ к локальной файловой системе.

3. Апплету нужна внешняя библиотека, которая является всеми jar. ИТАК, под этим подразумевается, что апплет не поддерживает внешнюю библиотеку jar? 🙁

Ответ №1:

Похоже, вы подходите к этому неправильно. Вы действительно не должны выполнять какой-либо анализ документа из апплета браузера. Вместо этого загрузите документ на сервер и проанализируйте его там. Требование к пользователям загружать 40 МБ jars, вероятно, неприемлемо в качестве конечного решения для всех, кто будет использовать создаваемое вами приложение.

Комментарии:

1. Ну, размер библиотеки можно уменьшить примерно до 2 МБ. Я могу перепаковать библиотеку только с теми классами, которые мне нужны. Так что это не будет проблемой. Проблема именно в том, что я заявил. Я хочу протестировать свой апплет локально, а затем я позабочусь о размере. Мне нужно заставить апплет работать с браузером (а не только с программой просмотра апплетов).

2. Возможно, вам следует отредактировать заголовок вопроса, чтобы лучше отразить ваш запрос. «Апплет, использующий вложенный Jar» кажется более подходящим названием.

3. Аниш, я уверен, что банки можно переупаковать, уплотнить и т. Д. Вопрос, который у меня действительно есть, заключается в том, почему вы хотите выполнять какой-либо анализ документов на стороне клиента? У меня определенно был случай, когда мне нужно было использовать апплет для некоторого взаимодействия с оборудованием на стороне клиента, но это был особый случай. Для того, что вы описываете, похоже, вы могли бы полностью избежать проблемы с апплетом и сделать все это на сервере. Может быть, я неправильно понимаю проблему?

4. @pra9ma: мне нужно, чтобы служба / приложение были подключены к сети. Таким образом, пользователи могут загружать свои документы и мгновенно получать количество слов в своем документе (то есть после завершения загрузки). И мне также нужно, чтобы процесс был автоматизирован . Я был бы признателен, если есть другое (лучшее) направление, чем это.

5. @Эндрю Томпсон: Я новичок. Спасибо вам, и я просто сделаю это.

Ответ №2:

«Класс не найден Исключения», связанные с внешней библиотекой Apache-Tika.

В атрибуте элемента может быть указано несколько банок archive applet . Смотрите раздел W3C об атрибуте архива..

Этот атрибут определяет разделенный запятыми список URI для архивов, содержащих классы и другие ресурсы, которые будут «предварительно загружены».

Комментарии:

1. Это сработало, и в то же время не сработало. Исключение Class Not Found исчезло, но теперь апплет вообще не отвечает. Теперь, если я могу спросить, каков наилучший способ отладки?

2. Кажется, пришло время для нового вопроса «(Как) отладить замороженный апплет (?)».

3. Проблема решена. Доступ апплета к локальному файлу, поэтому мне нужно было подписать его, что я и сделал, и вуаля! Это сработало. Апплет запущен и запущен, и @Andrew Thompson и pra9ma — «Я благодарю вас обоих».

4. 1) pra9ma не будет уведомлен о вашем комментарии, если он не будет сделан в ответ на их ответ. 2) Хороший способ выразить благодарность — проголосовать за сообщения, которые вы сочли полезными (в этой или любой другой теме). 3) Рад, что вы разобрались с проблемами апплета. 🙂

Ответ №3:

Почему бы просто не включить все классы из всех зависимостей jar в ваш applet jar?

Tika включает в себя одну банку, которая делает именно это — tika-app.jar . Вы можете запустить tika-app его, не требуя никаких дополнительных jar или зависимостей, он включает в себя все, что требуется.

Если вы посмотрите на tika-app pom, вы увидите соответствующую магию maven для создания такого jar. В противном случае, чтобы сделать это вручную, просто распакуйте все ваши банки в один каталог, а затем снова вставьте его.

Комментарии:

1. Плохая стратегия. Часто нарушает лицензию библиотек и делает невозможной ленивую загрузку JWS и болезненное автоматическое обновление.