Spring SecurityをWebプロジェクトに含めようとしています。このチュートリアルに従っています http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld。 html
チュートリアルでは、指定されたMavenプロジェクトを使用してすべてを完了し、正常に動作します。しかし、それをプロジェクトに含めようとすると、コンパイルエラーが表示されます。具体的には、iがAbstractSecurityWebApplicationInitializer
から拡張すると、指定されたエラーが表示されます
この行の複数のマーカー
- タイプjavax.servlet.ServletContextを解決できません。必要な.classファイルから間接的に参照されています
- タイプjavax.servlet.ServletExceptionは解決できません。必要な.classファイルから間接的に参照されています
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>
助けてくれてありがとう!
Mvn clean install -Uを使用する
javax.servlet
API をコンパイル時の依存関係に追加するだけです。ビルドに含める必要はありません。ターゲットサーブレットコンテナによって既に提供されています。
現在のpomは、本格的なJavaではなく、ベアボーンサーブレットコンテナ( Tomcat 、 Jetty など)にデプロイすることを示唆しています。 EEアプリケーションサーバー( WildFly 、 TomEE 、 GlassFish 、 Liberty など)コンテナが提供するものを使用する代わりに、webappとともにJSFを提供することによるクラスローディング関連のトラブル。
その場合、Tomcat 8のような Servlet 3.1 コンテナに対して以下の依存関係を追加する必要があります。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
または、Tomcat 7のような古い Servlet 3. コンテナを実際にターゲットにしている場合は、<version>
を3.0.1
に変更します(注:ミスのため3.0
はありません彼らの側で)。
実際にWildFly 8などの Java EE 7 アプリケーションサーバーにデプロイする場合は、代わりに以下の依存関係を使用してください。 javax.servlet
(およびjavax.faces
を含む Java EE API 全体を対象としているため、これらの個々のJSF API/impl依存関係を削除します):
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
また、JBoss AS 7などの古い Java EE 6 アプリケーションサーバーをターゲットにしている場合は、<version>
を6.0
に変更します。
これは私にとってはうまくいきました:上記のソリューションが機能しない場合は、プロジェクト>プロパティ> Javaビルドパス>ライブラリ>ライブラリタブからライブラリを追加>サーバーランタイムを選択>次> Apache Tomcat v 7.0を選択>完了> OK
次のように、更新された親を設定してみてください。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.6.RELEASE</version>
<relativePath></relativePath>
</parent>
これは私のために解決しました。
助けになったのは、ディレクトリ.m2のリポジトリを削除し、削除後にrun maven:packageを実行したことです。