2015-06-09 18 views
14

Tôi đang cố gắng để bao gồm Xuân An cho dự án web của tôi, tôi làm theo hướng dẫn này http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.htmlLoại javax.servlet.ServletContext và javax.servlet.ServletException không thể giải quyết

tôi đã thực hiện tất cả mọi thứ trong hướng dẫn với dự án maven đã cho và hoạt động tốt. Nhưng khi tôi đang cố gắng đưa nó vào dự án của tôi thì một lỗi biên dịch xuất hiện. Cụ thể khi tôi kéo dài từ AbstractSecurityWebApplicationInitializer xuất hiện lỗi cho

Code with the error

The floating compilation error

Nhiều dấu tại dòng này

  • Loại javax.servlet.ServletContext không thể được giải quyết. Nó được tham chiếu gián tiếp từ các tệp .class yêu cầu
  • Kiểu javax.servlet.ServletException không thể được giải quyết. Nó được gián tiếp tham chiếu từ các tập tin .class cần

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>spring.primefaces</groupId> 
<artifactId>primefaces.testwebapp</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<name>SpringPrimefacesWebApp</name> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <!-- JSF 2.2 core and implementation --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.2.11</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.2.11</version> 
    </dependency> 
    <!-- Prime Faces --> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>5.2</version> 
    </dependency> 
    <!-- Spring security --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.0.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.0.1.RELEASE</version> 
    </dependency> 
</dependencies> 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-framework-bom</artifactId> 
      <version>4.1.6.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Thanks for the help!

Sử dụng mvn clean install -U

enter image description here

+0

Nếu không có các phần liên quan của pom của bạn thật khó để chẩn đoán. –

+0

Xin lỗi, tôi vừa tải lên pom hoàn chỉnh. –

+0

thực hiện lệnh từ dấu nhắc lệnh (thực hiện từ thư mục chứa POM). mvn clean install -U. Nếu điều này không hoạt động, hãy kiểm tra tệp apache-maven-3.3.1 \ conf \ settings.xml cho đường dẫn lưu trữ –

Trả lời

34

Chỉ cần thêm javax.servlet API đến sự phụ thuộc thời gian biên dịch. Bạn không cần phải bao gồm nó trong build, nó đã được cung cấp bởi container servlet đích.

pom hiện tại của bạn cho thấy rằng bạn đang triển khai để một container barebones servlet (, Jetty, vv) thay vì một chính thức máy chủ đầy đủ Java EE ứng dụng (WildFly, TomEE, GlassFish, Liberty, vv), nếu không bạn muốn đã gặp phải sự cố liên quan đến lớp tải bằng cách cung cấp JSF cùng với webapp thay vì sử dụng bộ chứa được cung cấp bởi bộ chứa.

Trong trường hợp đó, thêm các phụ thuộc dưới đây sẽ làm cho một container Servlet 3.1 như Tomcat 8:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
</dependency> 

Hoặc nếu bạn đang thực sự nhắm mục tiêu một Servlet 3.0 chứa cũ như Tomcat 7, thay đổi <version>-3.0.1 (lưu ý: không có 3.0 do lỗi của họ).

Nếu bạn tình cờ triển khai máy chủ ứng dụng Java EE 7 như WildFly 8, hãy sử dụng phụ thuộc bên dưới thay thế.Nó bao gồm toàn bộ Java EE API, bao gồm javax.servlet (và javax.faces, vì vậy sau đó bạn muốn loại bỏ những JSF phụ thuộc API/impl cá nhân):

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

Cũng ở đây, nếu bạn đang nhắm mục tiêu một máy chủ Java EE 6 ứng dụng cũ như JBoss AS 7, thay đổi <version> thành 6.0.

+0

Điều này sẽ giúp @Amaury Esparza –

+0

Cảm ơn bạn, việc thêm phụ thuộc vào tệp pom là hữu ích – asifaftab87

+0

rất hữu ích, cảm ơn rất nhiều – ashkanr

4

này đã làm việc cho tôi: nếu giải pháp được cung cấp trên công việc doesnt Project> Properties> Java Build Path> Thư viện> Thêm thư viện từ tab thư viện> Chọn thời gian chạy server> Next> chọn Apache Tomcat v 7.0> Finish> Ok

0

thử đặt cha mẹ được cập nhật, như sau:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.6.RELEASE</version> 
    <relativePath></relativePath> 
</parent> 

giải pháp này đã được giải quyết cho tôi.

0

gì giúp đối với tôi là xóa các kho lưu trữ trong thư mục .m2 và sau khi xóa maven chạy: gói

Các vấn đề liên quan