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サポートフォーラムで既にこの質問をしましたが、有用な結果はありません。
原因は、このプロジェクトが実際に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内からこれらの「自然」を編集する方法はありますか?
Eclipse Heliosでは、プロジェクトプロパティの「Java EE Module Dependencies」が「Deployment Assembly」に置き換えられました。
このため、Eclipse Heliosでこの問題を解決するための方法は次のとおりです。
これで問題は解決しますが、「Deployment Assembly」で何が起こったかを確認したい場合は、プロジェクトプロパティを再度開き、「Deployment Assembly」を選択すると、standard.jarとjstl.jarがWEB- INF/libフォルダー。
これが私の問題であり、どのように修正したか...
私は誰もが上記で言及したことなどすべてを行いましたが、まだこのエラーが発生していました。間違ったhttp://Java.Sun.com/jsp/jstl/fmt
とhttp://Java.Sun.com/jsp/jstl/core
のURIを使用していたことがわかりました。
URIを上から次のように切り替えてみてください。
http://Java.Sun.com/jstl/fmt
http://Java.Sun.com/jstl/core
また、クラスパスで参照される正しいjarがあることを確認してください。
ストライプtaglib uriが見つからないと表示するのと同じ問題がありました。 IndigoとMavenを使用していて、[プロパティ]-> [Javaビルドパス]-> [順序とエクスポート]タブをチェックしたとき、(新しいプロジェクトチェックアウトで)何らかの理由で[Maven依存関係]チェックボックスがオフになっていることがわかりました。そのボックスをチェックしてMavenのクリーンインストールを実行するだけで、すべてのエラーが解消されました。
ビルドパスにMavenの依存関係が必要だとEclipseが想定していないのはなぜだろう...
同じ問題に走りました、私は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/
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を使用します。これで私の問題が解決しました。それが役に立てば幸い!
多くは、それがどのようなプロジェクトであるかに依存します。 WTPのJSPサポートは、JSPファイルがWEB-INFフォルダーの親フォルダー(src/web、TLDを見つけるために「/」として処理される)と同じフォルダーの下にあるか、プロジェクトメタデータをそのルートがどこにあるかを知るのに役立ちます(デプロイメントアセンブリを介して動的Webプロジェクトで行われます)。 TLDファイルをどのように参照していますか?また、JSPファイルはどこにありますか?
また、Eclipseフォーラムへの元の投稿を見逃したかもしれません。私が見たものは、この1日後に丸1日投稿されました。
今日この問題を修正しました。
役に立てば幸いです。
F:\Apache-Tomcat-7.0.21\webapps\examples\WEB-INF\lib
の2つのライブラリを確認します。
同じ問題に直面しました。これは私が問題を解決するためにしたことです。
Tldが通常WEB-INFディレクトリの下のクラスパスにある場合、次の2つのヒントで問題を解決する必要があります(環境のセットアップに関係なく)。
TLDの<uri>
とjspページのtaglibディレクティブのuriが一致することを確認してください。 tldの<uri>
要素は、タグライブラリの一意の名前です。
Tldに<uri>
要素がない場合、コンテナはtaglibディレクティブのuri属性を実際のTLDへのパスとして使用しようとします。例えばWEB-INFフォルダーにカスタムtldファイルを作成し、このtldへのパスをJSPのuri値として使用できます。ただし、これは悪い習慣であり、パスがハードコーディングされるため、回避する必要があります。
私はSpring STSプラグインとSpring webmvcテンプレートプロジェクトを使用しています。最初にMaven m2eプラグインをインストールする必要がありました: http://www.Eclipse.org/m2e/
そして、プロジェクトをきれいにします。 Project -> Clean...
の下
[ビルドパス]-> [ライブラリの追加]に移動し、追加するライブラリの種類として[サーバーランタイム]を選択します。 [次へ]をクリックし、サーバーランタイムを選択してクラスパスに追加すると、jstl.jarおよびstandard.jarがサーバーのクラスパスにある場合、問題はなくなります。
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'でも同じことをしなければなりませんでした。
私にとって、このエラーは、新しいバージョンのEclipseを使用しようとするたびに発生します。どうやら、新しいEclipseはM2_REPO
変数をリセットし、Marker
ビューですべてのタグライブラリエラーを取得します(ejb検証エラーが発生する場合があります)。
M2_REPO
変数を実際のMavenリポジトリの場所を指すように更新した後、すべてを機能させるには、2〜3プロジェクト->クリーンイテレーションが必要です。
また、場合によっては、このタグライブラリエラーとともにいくつかのxml検証エラー(ejb)があります。対応するXMLファイルを手動で更新し、*。xsdファイルルックアップを開始し、xml検証エラーが解決されます。これを投稿すると、タグライブラリのエラーもなくなります。
一方、Javaソースでのみ作業していて、作業中の大規模プロジェクトで触れていないものからこれらのエラーを取得している場合は、Eclipseで検証をオフにすることができます。設定は、[設定]-> [Web]-> [JSPファイル]-> [検証]にあります。
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を使用している場合グラスフィッシュは両方ともすでに内部にあります。
私はTomcat 6.0とEclipseを使用して同じ問題を抱えていたので、友人が提案したことを試してみました。私が尋ねた質問と私のコメントがコメントされたリンクはここにあります:
JSTL Tomcat 6.0 taglib記述子エラーが見つかりません
これで「タグライブラリ記述子が見つかりません」という問題が解決するかどうか教えてください。
このエラーは、いくつかの異なるソースから発生する可能性があります。 EclipseがTLDドキュメントに設定されているバージョンのJSP仕様を実装していない場合、1つのケース(この質問に対する他の回答には記載されていません)が発生します。通常、Eclipseリリースは、新しいサーブレットおよびJSP仕様の実装に最大1年遅れています。 このEclipseバグ を参照してください。
この場合、Webアプリケーションは最新バージョンのTomcatで正常に動作する可能性がありますが、EclipseはTLDが見つからないことを訴えます。短期的な解決策(Eclipseのエラーを無視すること以外)は、JSPバージョンをEclipseのバージョンがサポートするバージョンにバンプダウンすることです。
また、実装するTLDバージョンにも注意してください。タグ名はv1.1からv2.0にわずかに変更されました(つまり、info
はdescription
でtaglib
になり、tag
の下の有効な要素ではありません。要素名にハイフンが含まれるようになりました)。 Eclipseには、TLDタグ名のつづりが間違っていても許容されません。
STS(springtool source suite)でも同じ問題がありました。
STSの下で、[プロパティ]、[プロジェクトファセット]よりもプロジェクトを右クリックし、ウィンドウの右側より[ランタイム]タブをクリックして、[VMware vFabric tc Server(...)]をオンにして、クリックします「適用」し、ワークスペースの更新後にOKする必要があります。