2016-04-05 22 views
1

を私はJSF 2.3.0-M05とTomcatを実行しようとしたが、私はエラーはJSF 2.3とTomcatの8開始できませんjavax.faces.view.facelets.FaceletCache.setCacheFactories

java.lang.NoSuchMethodError: javax.faces.view.facelets.FaceletCache.setCacheFactories(Ljavax/faces/view/facelets/FaceletCache$MemberFactory;Ljavax/faces/view/facelets/FaceletCache$MemberFactory;)V 
を取得します

完全なログファイル:http://pastebin.com/UkhQ3L5D
のMavenのpom.xml:http://pastebin.com/P4ZJYm5v

は、任意の解決策はありますか、これは既知の問題ですか?

+0

ランタイムクラスパスが複数の異なるバージョンのJSFライブラリで汚染されている場合に起こります。ちょうど他のバージョンを取り除く。 – BalusC

+0

私はPOMファイルのmaven依存関係を変更しました:http://pastebin.com/P4ZJYm5vたぶんtomcatのlibフォルダのjarファイルをアップグレードする必要がありますか? –

答えて

3

java.lang.NoSuchMethodError: javax.faces.view.facelets.FaceletCache.setCacheFactories(Ljavax/faces/view/facelets/FaceletCache$MemberFactory;Ljavax/faces/view/facelets/FaceletCache$MemberFactory;)V

このメソッドは、JSF 2.3以降では新しく追加されました。この問題は、実行時クラスパスに古いJSF APIバージョンがあることを示唆しています。 your pom.xmlに基づい

、次の依存関係が矛盾している:

<dependency> 
    <groupId>javax.faces</groupId> 
    <artifactId>javax.faces-api</artifactId> 
    <version>2.2</version> 
</dependency> 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>7.0</version> 
</dependency> 

最初は(のJava EE 7 APIの唯一javax.faces.*一部)JSF 2.2 APIを表しています。それをすべて削除します。 JSF 2.3の依存関係にはすでに独自のセットがあります。

JSF 2.2、Servlet 3.1、EL 3.0、CDI 1.1、JAX-RS 1.0、JSONP 1.0などを含む2番目はthe entire Java EE 7 APIです。これはwebappのランタイムクラスパスでは最終的に終わることはありません。これはすでにターゲットランタイムによって提供されているはずです。それをprovidedにする必要があります。

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

あなたはベアボーンなどのTomcat 8.0、唯一の船JSP 2.3、サーブレット3.1、EL 3.0としてservletcontainerとボックスアウトWebSocketを1.1をターゲットと実際のJava EEサーバの代わりにしているとき、これは実際に誤解されます。 Java EE 7 API全体ではなく、すべてを個別に指定する必要があります。それ以外の場合、誤ってJSF、JSTL、CDIなどのTomcatが提供していないJava EE 7 APIの一部を誤ってインポート/使用しないようなコードを書く際には注意が必要です。 webappと共に(あなたがすでにいくつかの部品のために行ったように)。

関連する問題