web-dev-qa-db-ja.com

Eclipseは、カスタムタグ(JSTLではない!)の「タグライブラリ記述子を見つけることができません」

Antで問題なくビルドされ、JBossに完全にデプロイされ、問題なく実行されるJava EEプロジェクトがあります。このプロジェクトには、いくつかのcustomタグライブラリ( JSTL !ではありません)が含まれていますが、これらも問題なく動作しています。

問題は、Eclipse IDE(Ganymede)にあります。カスタムタグを使用するすべてのJSPファイルで、JSPパーサーはtaglib include行に次のエラーを表示します。

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

これにより、タブライブラリのすべての使用にエラーのフラグが立てられ、IDEには定義がないため、タグパラメーターなどをチェックできません。

私たちの完璧に機能するJSPファイルは赤いエラーの海であり、私の目は燃え始めています。

Eclipseに、「探しているタグライブラリ記述子は「src/web/WEB-INF /(example)-taglib /(example).tld」です」と単純に伝えるにはどうすればよいですか?

Eclipseサポートフォーラムで既にこの質問をしましたが、有用な結果はありません。

60
ryandenki

原因は、このプロジェクトが実際にJava EEプロジェクトであるとEclipseによって考慮されていなかったことが原因であることがわかりました。 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ファイルを適切に読み取る新しい「動的Webプロジェクト」を作成し、古いプロジェクトの構成と比較することで、原因を見つけることができました。

これらを追加する唯一の方法は、.projectファイルを編集することでしたが、プロジェクトを再度開いた後、すべてが魔法のように機能しました。上記のpribeiroで参照されている設定は、プロジェクトが既にデフォルト設定に準拠しているため、必要ありませんでした。

Pribeiroとnitindの両方の答えは、検索をすぐに開始するためのアイデアをくれました、ありがとう。

UI内からこれらの「自然」を編集する方法はありますか?

10
ryandenki

Eclipse Heliosでは、プロジェクトプロパティの「Java EE Module Dependencies」が「Deployment Assembly」に置き換えられました。

このため、Eclipse Heliosでこの問題を解決するための方法は次のとおりです。

  • パッケージエクスプローラーでプロジェクトを右クリックし、「インポート...」を選択します
  • デフォルトの選択「ファイルシステム」を受け入れ、「次へ」を押します
  • Fromディレクトリ行の[参照]を押して、Tomcatのインストールに移動し、webapps/examples/WEB-INF/libファイルを見つけます(Tomcat 6があります。Tomcatの他のバージョンにはwebapps/jsp-examples/WEB-というパスがあります。 INF/lib)。パスに入ったら、[OK]を押します。
  • Jstl.jarおよびstandard.jarの横をクリックして、チェックボックスをアクティブにします。
  • [Into folder]行で[参照]をクリックし、ライブラリフォルダーを選択します。プロジェクト内で/ libを使用します。
  • 「完了」をクリックします
  • パッケージエクスプローラービューでプロジェクトを右クリックし、プロパティを選択します(またはAlt + Enterを押します)
  • 「Java Build Path」をクリックします
  • 「Add Jar」をクリックし、プロジェクト、フォルダーlibをクリックし、jstl.jarを選択して、OKを押します
  • 「Add Jar」をクリックし、プロジェクト、フォルダーlibをクリックし、standard.jarを選択して、OKを押します
  • [OK]を押してプロパティダイアログを閉じます
  • 問題ビューをクリックして、「クラスパスエントリ.../jstl.jarはエクスポートまたは公開されません。ランタイムClassNotFoundExceptionsが発生する可能性があります。」というメッセージを選択します。
  • それを右クリックして、「クイックフィックス」を選択します。
  • デフォルトの「関連付けられた生のクラスパスエントリを公開/エクスポート依存関係としてマークする」を受け入れ、[完了]を押します。
  • Standard.jarについても同じことを行います

これで問題は解決しますが、「Deployment Assembly」で何が起こったかを確認したい場合は、プロジェクトプロパティを再度開き、「Deployment Assembly」を選択すると、standard.jarとjstl.jarがWEB- INF/libフォルダー。

28
stivlo

これが私の問題であり、どのように修正したか...

私は誰もが上記で言及したことなどすべてを行いましたが、まだこのエラーが発生していました。間違ったhttp://Java.Sun.com/jsp/jstl/fmthttp://Java.Sun.com/jsp/jstl/coreのURIを使用していたことがわかりました。

URIを上から次のように切り替えてみてください。

http://Java.Sun.com/jstl/fmt
http://Java.Sun.com/jstl/core

また、クラスパスで参照される正しいjarがあることを確認してください。

18
Polaris878

ストライプtaglib uriが見つからないと表示するのと同じ問題がありました。 IndigoとMavenを使用していて、[プロパティ]-> [Javaビルドパス]-> [順序とエクスポート]タブをチェックしたとき、(新しいプロジェクトチェックアウトで)何らかの理由で[Maven依存関係]チェックボックスがオフになっていることがわかりました。そのボックスをチェックしてMavenのクリーンインストールを実行するだけで、すべてのエラーが解消されました。

ビルドパスにMavenの依存関係が必要だとEclipseが想定していないのはなぜだろう...

13
Philip Murphy

同じ問題に走りました、私はmavenを使用しているので、これを私のWebプロジェクトの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/

8
Mark J Miller

JSPにJSTLコアライブラリを含めようとしたとき:

<%@ 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"

[プロジェクトプロパティ]-> [ターゲットランタイム]に移動し、使用しているサーバー(Geronimo 3.0)を確認しました。ほとんどの人はTomcatを使用します。これで私の問題が解決しました。それが役に立てば幸い!

4
Tanvir

多くは、それがどのようなプロジェクトであるかに依存します。 WTPのJSPサポートは、JSPファイルがWEB-INFフォルダーの親フォルダー(src/web、TLDを見つけるために「/」として処理される)と同じフォルダーの下にあるか、プロジェクトメタデータをそのルートがどこにあるかを知るのに役立ちます(デプロイメントアセンブリを介して動的Webプロジェクトで行われます)。 TLDファイルをどのように参照していますか?また、JSPファイルはどこにありますか?

また、Eclipseフォーラムへの元の投稿を見逃したかもしれません。私が見たものは、この1日後に丸1日投稿されました。

3
nitind

今日この問題を修正しました。

  • 出力ディレクトリをWEB-INF/classesフォルダーに変更します。 (プロジェクト/プロパティ/ Javaビルドパス、デフォルトの出力フォルダー)
  • モジュールの依存関係を割り当てます。 (プロジェクト/プロパティ/ Java EEモジュールの依存関係)これらは、Eclipseがタグライブラリ定義も検索するWEB-INF/libフォルダーにコピーされます。

役に立てば幸いです。

3
pribeiro

F:\Apache-Tomcat-7.0.21\webapps\examples\WEB-INF\libの2つのライブラリを確認します。

  1. jstl.jar
  2. standard.jar
2
Buminda

同じ問題に直面しました。これは私が問題を解決するためにしたことです。

  1. プロジェクトを選択して右クリックします。
  2. プロパティをクリックします。
  3. [ライブラリ]タブをクリックします。
  4. [ジャーの追加]をクリックします。
  5. エラーに関連するjarを追加します。
2
Nirmal Mangal

Tldが通常WEB-INFディレクトリの下のクラスパスにある場合、次の2つのヒントで問題を解決する必要があります(環境のセットアップに関係なく)。

  1. TLDの<uri>とjspページのtaglibディレクティブのuriが一致することを確認してください。 tldの<uri>要素は、タグライブラリの一意の名前です。

  2. Tldに<uri>要素がない場合、コンテナはtaglibディレクティブのuri属性を実際のTLDへのパスとして使用しようとします。例えばWEB-INFフォルダーにカスタムtldファイルを作成し、このtldへのパスをJSPのuri値として使用できます。ただし、これは悪い習慣であり、パスがハードコーディングされるため、回避する必要があります。

1
rabiya khan

私はSpring STSプラグインとSpring webmvcテンプレートプロジェクトを使用しています。最初にMaven m2eプラグインをインストールする必要がありました: http://www.Eclipse.org/m2e/

そして、プロジェクトをきれいにします。 Project -> Clean...の下

1
TalkLittle

[ビルドパス]-> [ライブラリの追加]に移動し、追加するライブラリの種類として[サーバーランタイム]を選択します。 [次へ]をクリックし、サーバーランタイムを選択してクラスパスに追加すると、jstl.jarおよびstandard.jarがサーバーのクラスパスにある場合、問題はなくなります。

1
Patrick Garner

MyEclipseとEclipse 6.6.0でも同じ問題が発生しました。それはすべてでURI値を裏打ちしました

<%@ taglib prefix="s" uri="/struts-tags"%>。 「Project/MyEclipse/Web/Tag Libraries」に移動し、Struts 1.2 TilesタグのデフォルトTLDプレフィックスを「s」に設定して修正しました。 'Project/MyEclipse/Web/Configure workspace settings .../Tag Libraries'でも同じことをしなければなりませんでした。

0
user335669

私にとって、このエラーは、新しいバージョンのEclipseを使用しようとするたびに発生します。どうやら、新しいEclipseはM2_REPO変数をリセットし、Markerビューですべてのタグライブラリエラーを取得します(ejb検証エラーが発生する場合があります)。

M2_REPO変数を実際のMavenリポジトリの場所を指すように更新した後、すべてを機能させるには、2〜3プロジェクト->クリーンイテレーションが必要です。

また、場合によっては、このタグライブラリエラーとともにいくつかのxml検証エラー(ejb)があります。対応するXMLファイルを手動で更新し、*。xsdファイルルックアップを開始し、xml検証エラーが解決されます。これを投稿すると、タグライブラリのエラーもなくなります。

0
Barun

一方、Javaソースでのみ作業していて、作業中の大規模プロジェクトで触れていないものからこれらのエラーを取得している場合は、Eclipseで検証をオフにすることができます。設定は、[設定]-> [Web]-> [JSPファイル]-> [検証]にあります。

0
user3923794

aPIと実装の2つのことが常にあることを理解する必要があります(次のコードの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を使用している場合グラスフィッシュは両方ともすでに内部にあります。

0
Ismail Marmoush

私はTomcat 6.0とEclipseを使用して同じ問題を抱えていたので、友人が提案したことを試してみました。私が尋ねた質問と私のコメントがコメントされたリンクはここにあります:

JSTL Tomcat 6.0 taglib記述子エラーが見つかりません

これで「タグライブラリ記述子が見つかりません」という問題が解決するかどうか教えてください。

0

このエラーは、いくつかの異なるソースから発生する可能性があります。 EclipseがTLDドキュメントに設定されているバージョンのJSP仕様を実装していない場合、1つのケース(この質問に対する他の回答には記載されていません)が発生します。通常、Eclipseリリースは、新しいサーブレットおよびJSP仕様の実装に最大1年遅れています。 このEclipseバグ を参照してください。

この場合、Webアプリケーションは最新バージョンのTomcatで正常に動作する可能性がありますが、EclipseはTLDが見つからないことを訴えます。短期的な解決策(Eclipseのエラーを無視すること以外)は、JSPバージョンをEclipseのバージョンがサポートするバージョンにバンプダウンすることです。

また、実装するTLDバージョンにも注意してください。タグ名はv1.1からv2.0にわずかに変更されました(つまり、infodescriptiontaglibになり、tagの下の有効な要素ではありません。要素名にハイフンが含まれるようになりました)。 Eclipseには、TLDタグ名のつづりが間違っていても許容されません。

TLD 2.0(jsp-version 2.0)リファレンス

TLD 2.1(jsp-version 2.3)リファレンス

0
vallismortis

STS(springtool source suite)でも同じ問題がありました。

STSの下で、[プロパティ]、[プロジェクトファセット]よりもプロジェクトを右クリックし、ウィンドウの右側より[ランタイム]タブをクリックして、[VMware vFabric tc Server(...)]をオンにして、クリックします「適用」し、ワークスペースの更新後にOKする必要があります。