Ответ 1
Убедитесь, что
.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar
не поврежден (и при необходимости выполните некоторую очистку).
В этой проблеме с JSTL я застрял последние пару дней. Любая помощь приветствуется.
Tomcat 6.0.28
Eclipse: Helios
pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
JSP:
<%@ page session="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="utilfn" uri="/utility-functions" %>
web.xml:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
Когда я развертываю войну, созданную Maven, на tomcat 6, используя диспетчер, он отлично работает. Когда я запускаю его как "Запускать как > Запустить на сервере" внутри eclipse, я получаю следующее:
Невозможно прочитать TLD "META-INF/c.tld" из файла JAR ":/< - location → /. metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar": org.apache.jasper.JasperException: Не удалось загрузить или создать экземпляр класса TagLibraryValidator: org.apache.taglibs.standard.tlv.JstlCoreTLV
Где бы я ни выглядел, он говорит то же самое:
- Убедитесь, что servlet-api и jsp-api не находятся в lib
- Обязательно используйте правильную версию JSTL и URI, которые идут с JSP 2.0.
И они кажутся прекрасными, так как я могу развернуть войну самостоятельно. Так что здесь не так!?
Убедитесь, что
.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar
не поврежден (и при необходимости выполните некоторую очистку).
После того, как я перешел с использованием Indigo Eclipse 3.7 и взял продленное обновление m2e, эта проблема возникла со мной, я удаляю зависимость ниже, она хорошо работала.
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
Я не уверен, почему проблемы были упущены, так как в моем понимании новой версии m2e уже есть библиотека компиляции jsp.
удалить:
javax.servlet.jsp JSP-апи 2,0 предоставлена
от вас pom.xml, и это должно быть.. это сработало в моем случае: -)
Похоже, что есть проблема с плагином maven/m2eclipse. Даже я вижу ту же проблему. По умолчанию он перетаскивает все файлы jar в каталог lib сервера. Что включает в себя объем "предоставленных" файлов jar. Эта проблема была исправлена в старых версиях m2eclipse. Но он снова появился.
Quickfix:
Сделайте резервную копию .classpath и .project и .settings/org.eclipse.wst.common.component.
Запустите эту команду:
mvn eclipse:eclipse
Или щелкните правой кнопкой мыши по проекту в подменю Maven, у вас есть команда Обновить проект..., которая Я думаю, делает то же самое.
переиздавать.
Объяснение:
Вероятно, вы добавили все Maven Dependencies в качестве сборки развертывания в ваш проект. Это копирует все записи пути класса Maven в каталог WEB-INF/lib. Откройте файл .classpath(в корне вашего проекта), и вы, вероятно, найдете следующий XML:
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
Это означает, что в этом случае будет выполняться копирование КАЖДОГО .jar файла.
Обновление проекта должно удалить XML-блок выше и явно указать файлы JAR.
Итак, если вы снова откроете .classpath, вы увидите это вместо:
<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar" sourcepath="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar" sourcepath="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1-sources.jar"/>
...
Это для пути к классу, который вам по-прежнему нужен, но он удалил зависимость, чтобы скопировать их в lib. Вместо этого, если вы откроете .settings/org.eclipse.wst.common.component/, вы увидите, что JAR файлы теперь явно перечислены:
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
И вы заметите, что теперь отсутствует jsp-api-2.1.jar. Примените ту же логику к другим JAR файлам.
Кто-нибудь знает, как сделать это автоматически?
платформа: eclipse 3.7 indigo, tomcat 6.0.29
прокомментировали следующие зависимости в pom.xml:
javax.servlet
org.apache.taglibs
это устранило проблему (поскольку они предоставляются через tomcat)...
Я согласен с ответом Джей. У меня такая же проблема. Если я удалю jsp-api из pom.xlm, тест maven завершится неудачно, потому что он не может найти класс jspWriter в jsp-api jar. Если я сохраняю jsp-api в pom и устанавливаю его в "предоставленный" или "тест", сторона tomcat будет терпеть неудачу, так как плагин m2e подталкивает jsp-api jar к зависимостям maven, которые затем включаются в мою развернутую libc tomcat. Я бы сказал, что это проблема с плагином, поскольку jsp-api должен быть объявлен в pom.xml как предусмотрено, потому что он предоставляется серверами приложений. Я не могу найти способ решить эту проблему, но вручную удалять jsp-api каждый раз после синхронизации сервера tomcat.
С Eclipse убедитесь, что вы установили 'Maven Integration для Eclipse WTP С помощью другого плагина без WTP, eclipse изменит ваш путь к классу и включит servlet-api.jar в ваших веб-приложениях.
Вы должны исключить зависимость jsp-api от импорта jstl в pom.xml:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<artifactId>jsp-api</artifactId>
<groupId>javax.servlet.jsp</groupId>
</exclusion>
</exclusions>
</dependency>
Удалено jsp-api 2.0 из .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MyProject/WEB-INF/Library/ это сработало для меня.
Я получал ту же ошибку в netbeans IDE 8.0.2. Оказывается, моя часть была установлена на 8080 для исходящих и выключения. Я изменил исходящий на 8081 сервер Tomcat. Это сработало! Затем я изменил свой порт отключения 8005. Чтобы перейти в "Сервис" > "Серверы" >
Теперь работает мой сервер tomcat.