3

Netbeans で開発した JSF アプリで使用したい<p:calendar>ので、PrimeFaces ライブラリを追加しました。ただし、アプリをデプロイすると、次のようなエラーが発生します。

Context with name [/ManagedBeansWithComponents] has not yet been started
C:\Users\Dell-pc\Documents\NetBeansProjects\ManagedBeansWithComponents\nbproject\build-   impl.xml:1040: The module has not been deployed.
See the server log for details.
BUILD FAILED (total time: 1 second)

そしてサーバーログには次のように書かれています:

Source Document: jar:file:/C:/Users/Dell-pc/Documents/NetBeansProjects/ManagedBeansWithComponents/build/web/WEB-INF/lib/primefaces-3.5.jar!/META-INF/faces-config.xml
Cause: Class 'org.primefaces.component.fileupload.FileUploadRenderer' is missing a runtime dependency: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItem

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

8

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItem

そこに原因があります。それは非常に明確です。上記のクラスがランタイム クラスパスにありません。解決策はかなり単純です。前述のクラス (またはそれを含む JAR ファイル) をランタイム クラスパスに配置します。パッケージ名が示すように、http://commons.apache.org/fileupload で入手できます(依存関係としてhttp://commons.apache.org/ioがあります)。それらの JAR を PrimeFaces JAR と同じ場所にダウンロードしてドロップするだけで、すべてがうまくいくはずです。


具体的な問題とは関係ありませんが、この特定の問題は PrimeFaces によって意図されていないことに注意してください。FileUploadFilterこの問題は、実際には で<p:fileUpload>コンポーネントの を登録した場合にのみ発生しますweb.xml。しかし、GlassFish 4.0 以降、クラスパスで見つかったすべての JSF コンポーネントとレンダラー クラスを、アプリケーションでまったく使用されていない場合でも、過剰にプリロードしています。クラスのロードにより、すべてのランタイム依存関係がチェックされます。欠落している場合は、NoClassDefFoundError. したがって、この問題は GlassFish 4.0 に固有のものであり、GlassFish 3.x または Tomcat や JBoss などの他のサーブレットコンテナを使用する場合には発生しません。

于 2013-09-04T12:03:34.123 に答える