Eclipse는 사용자 정의 태그에 대한 "태그 라이브러리 설명자를 찾을 수 없습니다"(JSTL 아님!)

StackOverflow https://stackoverflow.com/questions/1265309

문제

저는 Ant로 잘 구축되고 JBoss에 완벽하게 배포되며 문제 없이 실행되는 Java EE 프로젝트를 가지고 있습니다.이 프로젝트에는 몇 가지가 포함됩니다. 관습 태그 라이브러리(이것은 JSTL!) 역시 어려움 없이 작동하고 있습니다.

문제는 Eclipse IDE(Ganymede)에 있습니다.사용자 정의 태그를 사용하는 모든 단일 JSP 파일에서 JSP 파서는 다음 오류와 함께 taglib 포함 행에 플래그를 지정합니다.

Cannot find the tag library descriptor for (example).tld

이로 인해 탭 라이브러리를 사용할 때마다 오류로 플래그가 지정되고 IDE에 해당 정의가 없으므로 태그 매개변수 등을 확인할 수 없습니다.

완벽하게 작동하는 JSP 파일은 빨간 오류의 바다이고 내 눈은 불타기 시작했습니다.

Eclipse에 "당신이 찾고 있는 태그 라이브러리 설명자는 "src/web/WEB-INF/(example)-taglib/(example).tld"입니다"라고 간단히 말할 수 있습니까?

나는 이미 Eclipse 지원 포럼에 이 질문을 했지만 도움이 되는 결과는 없었습니다.

도움이 되었습니까?

해결책 4

그 원인은 Eclipse에서 이 프로젝트를 실제로 Java EE 프로젝트로 전혀 간주하지 않았기 때문인 것으로 밝혀졌습니다.이는 3.1의 오래된 프로젝트였으며 현재 우리가 사용하고 있는 Eclipse 3.5에서는 프로젝트 구성 파일에 여러 "특성"을 설정해야 합니다.

<natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>InCode.inCodeNature</nature>
    <nature>org.eclipse.dltk.javascript.core.nature</nature>
    <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>

JSP 파일을 올바르게 읽는 새로운 "동적 웹 프로젝트"를 생성하고 이전 프로젝트의 구성과 비교하여 원인을 찾을 수 있었습니다.

이를 추가할 수 있는 유일한 방법은 .project 파일을 편집하는 것이었지만 프로젝트를 다시 연 후에 모든 것이 마술처럼 작동했습니다.위의 pribeiro에서 참조한 설정은 프로젝트가 이미 기본 설정을 준수했기 때문에 필요하지 않았습니다.

pribeiro와 nitind의 답변은 모두 내 검색을 시작할 수 있는 아이디어를 제공했습니다. 감사합니다.

UI 내에서 이러한 "특성"을 편집하는 방법이 있습니까?

다른 팁

Eclipse Helios에서는 프로젝트 속성의 "Java EE 모듈 종속성"이 "배포 어셈블리"로 대체되었습니다.

따라서 Eclipse Helios로 이 문제를 해결하기 위해 제가 한 방법은 다음과 같습니다.

  • 패키지 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "가져오기..."를 선택합니다.
  • 기본 선택인 "파일 시스템"을 수락하고 "다음"을 누릅니다.
  • From 디렉터리 줄에서 "Browse"를 누르고 Tomcat 설치로 이동하여 webapps/examples/WEB-INF/lib 파일을 찾습니다. (저는 Tomcat 6을 사용하고 있으며 다른 버전의 Tomcat에는 webapps/jsp-examples/WEB- 경로가 있을 수 있습니다. INF/lib).경로에 들어가면 확인을 누릅니다.
  • jstl.jar 및 Standard.jar 옆을 클릭하여 확인란을 활성화합니다.
  • Into 폴더 줄에서 찾아보기를 클릭하고 라이브러리 폴더를 선택합니다.프로젝트 내에서 /lib를 사용합니다.
  • "마침"을 클릭하세요
  • 패키지 탐색기 보기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다(또는 Alt + Enter 누르기).
  • "Java 빌드 경로"를 클릭하세요.
  • "Jar 추가"를 클릭하고 프로젝트, 폴더 lib를 클릭하고 jstl.jar을 선택한 다음 확인을 누릅니다.
  • "Jar 추가"를 클릭하고 프로젝트, 폴더 lib를 클릭하고 Standard.jar을 선택한 다음 확인을 누릅니다.
  • 확인을 눌러 속성 대화 상자를 닫습니다.
  • 문제 보기를 클릭하고 "Classpath 항목 .../jstl.jar은 내보내거나 게시되지 않습니다."라는 메시지를 선택합니다.런타임 ClassNotFoundException이 발생할 수 있습니다."
  • 마우스 오른쪽 버튼을 클릭하고 "빠른 수정"을 선택하십시오.
  • 기본값인 "연관된 원시 클래스 경로 항목을 게시/내보내기 종속성으로 표시"를 수락하고 마침을 누릅니다.
  • Standard.jar에 대해서도 동일한 작업을 수행합니다.

이렇게 하면 문제가 해결되지만 "배포 어셈블리"에서 발생한 내용을 확인하려면 프로젝트 속성을 다시 열고 "배포 어셈블리"를 선택하면 WEB에 Standard.jar 및 jstl.jar이 추가된 것을 볼 수 있습니다. INF/lib 폴더.

이것은 내 문제 였고 어떻게 해결했는지 ...

나는 위에서 언급 한 모든 사람이 모두를 해왔지만 여전히이 오류를 얻고있었습니다. 내가 URI를 사용하고 있었다는 것이 밝혀졌습니다 http://java.sun.com/jsp/jstl/fmt 그리고 http://java.sun.com/jsp/jstl/core 틀렸다.

URI를 위에서 위로 전환하십시오.

http://java.sun.com/jstl/fmt
http://java.sun.com/jstl/core

또한 수업 경로에서 올바른 항아리를 참조하십시오.

나는 발견되지 않은 것처럼 보이는 줄무늬 taglib uri와 같은 문제가있었습니다. 나는 Indigo와 Maven을 사용하고 있었고 속성을 확인했을 때-> Java Build Path-> Order & Export 탭 (새로운 프로젝트 체크 아웃에서)을 찾았습니다. 해당 상자를 확인하고 Maven Clean 설치를 수행하면 모든 오류가 발생했습니다.

Eclipse가 왜 빌드 경로에서 내 Maven 의존성을 원한다고 가정하지 않는지 궁금합니다 ...

같은 문제가 발생했는데 Maven을 사용하여 웹 프로젝트에서 POM에 추가했습니다.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version> <!-- just used the latest version, make sure you use the one you need -->
    <scope>provided</scope>
</dependency>

이로 인해 문제가 해결되었고 OP와 마찬가지로 모든 것이 이미 JBoss에서 작동하기 때문에 "제공"범위를 사용했습니다.

해결책을 찾은 곳은 다음과 같습니다. http://alfredjava.wordpress.com/2008/12/22/jstl-connot-resolved/

JSP에 JSTL Core 라이브러리를 포함 시키려고했을 때 :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Eclipse (Indigo)에서 다음과 같은 오류가 발생했습니다.

Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

프로젝트 속성 -> Targeted Runtimes에 가서 사용중인 서버를 확인했습니다 (Geronimo 3.0). 대부분의 사람들은 Tomcat을 사용하는 것입니다. 이것은 내 문제를 해결했습니다. 도움이되기를 바랍니다!

오늘이 문제를 해결했습니다.

  • 출력 디렉토리를 Web-Inf/Classer 폴더로 변경하십시오. (프로젝트/속성/Java 빌드 경로, 기본 출력 폴더)
  • 모듈 종속성을 할당합니다. (Project/Properties/Java EE 모듈 종속성) Eclipse가 태그 LIB 정의를 찾는 Web-Inf/Lib 폴더에 복사됩니다.

도움이되기를 바랍니다.

많은 프로젝트가 어떤 종류의 프로젝트인지에 달려 있습니다. WTP의 JSP 지원은 JSP 파일이 Web-INF 폴더의 부모 인 것과 동일한 폴더 아래에있을 것으로 예상합니다 (SRC/Web, TLD를 찾기 위해 "/"로 취급하거나 프로젝트 메타 데이터를 설정할 수 있습니다. 그 루트가 어디에 있는지 알도록 도와줍니다 (배포 어셈블리를 통한 다이내믹 웹 프로젝트에서 수행). TLD 파일을 어떻게 언급하고 있으며 JSP 파일은 어디에 있습니까?

그리고 아마도 나는 Eclipse 포럼에 대한 원래 게시물을 놓쳤을 것입니다. 내가 본 것은이 후 하루 종일 게시되었습니다.

두 라이브러리를 확인하십시오 F:\apache-tomcat-7.0.21\webapps\examples\WEB-INF\lib:

  1. jstl.jar
  2. 표준. 자

나는 같은 문제에 직면했다. 이것이 제가 문제를 해결하기 위해 한 일입니다.

  1. 프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭하십시오.
  2. 속성을 클릭하십시오.
  3. 라이브러리 탭을 클릭하십시오.
  4. 'Jars 추가'를 클릭하십시오.
  5. 오류에 대해 관련 항아리를 추가하십시오.

경로 빌드 -> 라이브러리 추가 및 라이브러리 유형을 위해 "서버 런타임"을 선택할 수 있도록 간단히 구축 할 수 있습니다. 다음을 클릭하고 서버 런타임을 선택하여 클래스 경로에 추가하면 jstl.jar 및 Standard.jar가 서버의 클래스 경로에있는 경우 문제가 사라집니다.

Spring STS 플러그인과 Spring WebMVC 템플릿 프로젝트를 사용하고 있습니다. 먼저 Maven M2E 플러그인을 설치해야했습니다. http://www.eclipse.org/m2e/

그런 다음 프로젝트를 청소하십시오. 아래에 Project -> Clean...

TLD가 클래스 경로에있는 경우 일반적으로 Web-Inf 디렉토리 아래에있는 경우 다음 두 가지 팁이 문제를 해결해야합니다 (환경 설정에 관계없이).

  1. 확인하십시오 <uri> JSP 페이지의 TAGLIB 지시문의 TLD와 URI에서 일치합니다. 그만큼 <uri> TLD의 요소는 태그 라이브러리의 고유 한 이름입니다.

  2. TLD에 a가없는 경우 <uri> 요소, 컨테이너는 Taglib 지시문의 URI 속성을 실제 TLD의 경로로 사용하려고 시도합니다. 예를 들어 웹 -INF 폴더에 사용자 정의 TLD 파일을 가질 수 있으며이 TLD의 경로를 JSP의 URI 값으로 사용할 수 있습니다. 그러나 이것은 나쁜 관행이며 경로가 하드 코딩되기 때문에 피해야합니다.

나는 MyClipse와 Eclipse 6.6.0에도 같은 문제가있었습니다. 그것은 모든 것에서 URI 값을 빨간색으로 정렬했습니다

<%@ taglib prefix="s" uri="/struts-tags"%>. 'Project/Myeclipse/Web/Tag Libraries'로 이동하여 Struts 1.2 타일 태그에 대한 기본 TLD 접두사를 'S'로 설정하여 수정했습니다. 또한 'Project/MyEclipse/Web/Configure Workspace 설정 .../태그 라이브러리'에서도 동일한 작업을 수행해야했습니다.

STS (SpringTool Source Suite)와 같은 문제가있었습니다.

STS에서 "런타임"탭을 클릭하고 "VMware VFabric TC Server (...)를 확인하고 클릭하는 클릭"VMware VFabric TC Server (...)를 확인하고 "Properties", "Project Facets"보다 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. "적용"하면 작업 공간 새로 고침 후에는 괜찮을 것입니다.

API와 구현의 두 가지가 항상 있다는 것을 이해해야합니다 (다음 코드의 Gradle 형식).

compile group:'javax.servlet.jsp.jstl', name:'javax.servlet.jsp.jstl-api', version:'1.2.1'

compile group:'org.glassfish.web', name:'javax.servlet.jsp.jstl',version:'1.2.1'

따라서 JSTL 지원이없는 서블릿 컨테이너를 사용하는 경우 물론 두 가지 모두를 제공하지 않습니다. 제가 저지른 실수는 내가 첫 번째를 넣는 것입니다. 그런 다음 Glassfish는 이미 둘 다 이미 내부에 있습니다.

저에게는이 오류가 새 버전의 Eclipse를 사용할 때마다 발생합니다. 분명히, 새로운 일식은 M2_REPO 변수와 나는 모든 태그 라이브러리 오류를 Marker 보기 (때로는 EJB 유효성 검사 오류 포함).

업데이트 후 M2_REPO 실제 Maven 저장소 위치를 가리 키려면 변수, 2-3 프로젝트 -> 클린 반복이 필요합니다. 모든 것이 작동합니다.

때로는이 태그 라이브러리 오류와 함께 XML 유효성 검사 오류 (EJB)가 있습니다. 해당 XML 파일을 수동으로 업데이트하고 *.xsd 파일 조회를 시작하고 XML 유효성 검사 오류가 해결됩니다. 이것을 게시하면 태그 라이브러리 오류도 사라집니다.

반면에 Java 소스에서만 작업하고 있으며 작동하는 큰 프로젝트에서 만지지 않는 것들로부터 이러한 오류를 얻는 경우 Eclipse의 유효성 검사를 해제 할 수 있습니다. 설정은 기본 설정-> 웹-> JSP 파일-> 유효성

나는 Tomcat 6.0과 Eclipse를 사용하여 같은 문제를 겪고 있었고 친구가 제안한 것을 시도해 보았습니다. 내가 묻는 질문에 대한 링크와 내 답변이 여기에서 찾을 수 있습니다.

JSTL Tomcat 6.0은 Taglib 디스크립터 오류를 찾을 수 없습니다

이것이 "Taglibrary 디스크립터를 찾을 수 없음"문제를 해결하는지 알려주십시오.

이 오류는 여러 다른 소스에서 발생할 수 있습니다. Eclipse가 TLD 문서에 설정된 JSP 사양의 버전을 구현하지 않은 경우 한 사례 (이 질문에 대한 다른 답변에서 언급되지 않음)가 발생합니다. Eclipse 릴리스는 일반적으로 최신 서블릿 및 JSP 사양을 구현할 때 최대 1 년 뒤에 뒤떨어집니다. 보다 이 일식 버그 예를 들어.

이 경우 최신 버전의 Tomcat에서 웹 응용 프로그램이 정상적으로 실행될 수 있지만 Eclipse는 여전히 누락 된 TLD에 대해 불평 할 수 있습니다. 단기 솔루션 (Eclipse의 오류를 무시하지 않음)은 JSP 버전을 Eclipse 버전에서 지원하는 버전으로 넘겨주는 것입니다.

또한 구현중인 TLD 버전을 명심하십시오. 태그 이름은 v1.1에서 v2.0에서 약간 변경되었습니다 (즉, info 지금입니다 description ~에 taglib 그리고 유효한 요소가 아닙니다 tag, 많은 요소 이름에는 이제 하이픈이 포함되어 있습니다). Eclipse는 철자가 틀린 TLD 태그 이름에 대한 공차가 없습니다.

TLD 2.0 (JSP-Version 2.0) 참조

TLD 2.1 (JSP-Version 2.3) 참조

jstl.jar를 JSTL1.2로 교체하십시오.

나는 또한 같은 문제에 직면했다. Eclipse 및 Tomcat Work 디렉토리에 동일한 버전의 JSTL이 있는지 확인하십시오. \webapps\examples\WEB-INF\lib 그리고에서 lib 폴더.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top