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. Таким образом, эта проблема предполагает, что у вас есть более ранняя версия API JSF в пути к среде выполнения.
На основе 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>
Первый представляет JSF 2.2 API (который является только javax.faces.*
частью Java EE 7 API). Удалите его вообще. У зависимостей JSF 2.3 уже есть свой набор.
Вторым является the entire Java EE 7 API, включая JSF 2.2, Servlet 3.1, EL 3.0, CDI 1.1, JAX-RS 1.0, JSONP 1.0 и т. Д. Это может не закончиться в пути к среде выполнения Webapp. Предполагается, что этот объект будет предоставлен целевой средой выполнения. Вы должны отметить его provided
.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
На самом деле это заблуждение, когда вы вместо реального сервера Java EE ориентации на баребоны servletcontainer, такие как Tomcat 8.0, который поставляется только JSP 2,3, Servlet 3.1, EL 3,0 и WebSockets 1,1 из коробки. Вы должны указать их индивидуально, а не весь API Java EE 7. В противном случае вы должны быть осторожны при написании кода, который вы случайно не импортируете/используете некоторые части Java EE 7 API, которые на самом деле не предоставляются Tomcat, такие как JSF, JSTL, CDI и т. Д. Затем вам необходимо явно предоставить их наряду с webapp (как вы уже делали для некоторых частей).
Это может произойти, если пул классов среды выполнения загрязнен несколькими различными версиями JSF-библиотек. Просто избавьтесь от других версий. – BalusC
Я только изменил зависимость maven в файле POM: http://pastebin.com/P4ZJYm5v Возможно, мне нужно обновить файл jar в папке lib tomcat? –