Не удается загрузить файлы jar Tomcat Embed - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть веб-приложение, которое я скопировал с одного сервера на другой. Я скопировал файл WAR в папку webapps, и он был правильно распакован.

Но при запуске приложения эта ошибка регистрируется:

IINFO: Deploying web application archive /var/lib/tomcat7/webapps/admin.war
Apr 03, 2019 10:36:50 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/admin/WEB-INF/lib/tomcat-embed-core-8.5.11.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/$
Apr 03, 2019 10:36:50 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/admin/WEB-INF/lib/tomcat-embed-el-8.5.11.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el$

Что это значит? это может быть из-за версии jvm на другом сервере?

Это версия Java на исходном сервере:

java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

И это на целевом сервере:

java version "1.7.0_181"
OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-0ubuntu0.3)
OpenJDK 64-Bit Server VM (build 24.181-b01, mixed mode)

С уважением Jaime

1 Ответ

0 голосов
/ 07 апреля 2019

Я не совсем уверен, если это дублирование это или нет. В любом случае, эта похожая проблема содержит полезный ответ BalusC , которым я хотел бы поделиться ( ссылка ).

Ответ BalusC:

Это признак загрязнения пути класса. Библиотеки API JSP / Servlet зависят от реализации сервера приложений и принадлежат Tomcat 6 в папке Tomcat / lib и ни в коем случае не должны перемещаться или дублироваться где-либо еще. Это рецепт проблем переносимости и коллизий при загрузке классов, с которыми вы столкнулись сейчас. Библиотеки в веб-приложении имеют приоритет при загрузке классов. Если там обнаружен servlet-api.jar, он, в свою очередь, ищет там свои зависимости, но там их явно не было.

Вы должны удалить все специфичные для appserver библиотеки из Webapp / WEB-INF / lib веб-приложения. Вы должны размещать там только специфичные для веб-приложений библиотеки. Храните специфичные для appserver библиотеки в собственном пути к классам по умолчанию для appserver, который в вашем случае представляет собой Tomcat / lib. Держите это нетронутым. Вы можете добавить библиотеки, которыми вы хотите поделиться со всеми веб-приложениями, или, что еще лучше, настроить для этого файл shared.loader в Tomcat / conf / catalina.properties.

Также удалите все специфичные для appserver и webapp-библиотеки библиотеки из папок JDK / lib и JRE / lib, если таковые имеются. Я слишком часто видел, что некоторые начинающие перемещают / копируют библиотеки там, потому что «иначе они не компилируются». Вы никогда не должны копировать туда библиотеки, не относящиеся к JRK / JRE. Это рецепт проблем с переносимостью. При компиляции классов с помощью javac вы должны использовать аргумент -cp для указания зависимых библиотек.

Обновление: в случае IDE (кажется, вы используете его, когда говорите о «пути сборки»), вам необходимо связать веб-проект с сервером приложений. Например, в Eclipse у вас есть возможность сделать это во время создания динамического веб-проекта. Вам необходимо интегрировать экземпляр сервера в Eclipse до создания проекта. Это можно сделать с помощью представления «Серверы» (при условии, что вы используете Eclipse для разработчиков Java EE, в противном случае выполните обновление). Вы также можете изменить его позже через запись Серверы в свойствах проекта. Выберите тот, который вы хотите использовать в качестве сервера «по умолчанию», и тогда его библиотеки будут автоматически включены в путь сборки проекта. Там абсолютно нет необходимости копировать / перемещать их в другое место. См. Также Как импортировать API javax.servlet в мой проект Eclipse?

...