Eclipse не может найти tld внутри файла jar
У меня есть JAR-файл, который содержит некоторые теги-файлы.
мой *.tag
файлы внутри /META-INF/tags/
папка (банка)
у меня тоже есть mytags.tld
внутри /META-INF/
папка (банка)
После упаковать все war
проект (с mytags.jar
внутри WEB-INF/lib
папка), он отлично работает в JBoss. Но Eclipse все еще не может распознать тег, получая ошибку Can not find the tag library descriptor for "http://www.mycompany.com"
Есть ли способ, чтобы Eclipse распознал мои теги?
следуйте источникам:
block.tag
<%@tag description="Item do block" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@attribute name="id" required="true" %>
<%@attribute name="label" required="true" %>
<%@attribute name="description" required="false" %>
<%@attribute name="icon" required="false" %>
<div id="${id}" class="block">
<div class="block-box ${icon}">
<div class="label">
<span>${label}</span>
</div>
<div class="description">
${description}
<jsp:doBody></jsp:doBody>
</div>
</div>
</div>
mytags.tld
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>My Tags</description>
<display-name>MyTags</display-name>
<tlib-version>1.0</tlib-version>
<short-name>mytags</short-name>
<uri>http://www.mycompany.com</uri>
<tag-file>
<name>block</name>
<path>/META-INF/tags/block.tag</path>
</tag-file>
</taglib>
some.jsp
<%@page contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.mycompany.com" prefix="mytags" %> <-- ECLIPSE MARKS ERROR HERE
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<mytags:block id="users" label="Users" icon="user">
<!-- some content -->
</mytags:block>
</body>
</html>
Но все отлично работает в JBoss. Только затмение обвиняет в ошибке.
Спасибо
1 ответ
Существующий отчет об ошибке https://bugs.eclipse.org/bugs/show_bug.cgi?id=330405 предлагает исправить сообщение об ошибке, указав на версию 1.1 JSP, обнаруженную в web.xml, в качестве причины устаревшей интерпретации taglib. URI.
Это подтверждается документом JSP Tag Libraries, http://docs.oracle.com/cd/B14099_19/web.1012/b14014/taglibs.htm:
Как впервые определено в спецификации JSP 1.1, директива taglib страницы JSP может полностью указывать имя и физическое расположение в структуре файла WAR файла TLD, который определяет конкретную библиотеку тегов, как в следующем примере:
<%@ taglib uri="/WEB-INF/oracustomtags/tlds/mytld.tld" prefix="oracust" %>
[..] В качестве альтернативы, как также определено в спецификации JSP 1.1, директива taglib может указывать имя и относительное физическое местоположение приложения файла JAR вместо файла TLD
Оба вышеприведенных соглашения вышли за пределы механизма резервирования, начиная с JSP 1.2, который ввел определения тегов отображения и использует их через произвольные строки taglib uri, http://docs.oracle.com/cd/B14099_19/web.1012/b14014/taglibs.htm.
Недавняя спецификация JSP 2.1 описывает отображение URI в разделе JSP.7.3.2:
URI, описывающий библиотеку тегов, отображается на путь ресурса TLD через карту taglib и запасную интерпретацию, которая должна использоваться, если карта не содержит URI. Карта taglib создается из явной карты taglib в web.xml (описанной в разделе JSP.7.3.3), которая расширяется неявными записями, полученными из упакованных библиотек тегов в веб-приложении (описано в разделе JSP.7.3.4), и неявные записи, известные контейнеру JSP. Резервная интерпретация нацелена на случайное использование механизма, как в цикле разработки Веб-приложения; в этом случае URI интерпретируется как прямой путь к TLD (см. раздел JSP.7.3.6.2).