IntelliJ找不到javax.servlet。*

时间:2016-08-30 13:48:14

标签: spring intellij-idea gradle

我目前面临一个奇怪的问题,即IntelliJ无法处理我的代码。像这样:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }
    ...
}

其中authenticationFilter返回GenericFilterBean的实例。这段代码很好地使用Gradle编译,但IntelliJ抱怨我的AuthenticationFilterUsernamePasswordAuthenticationFilter.class与所需参数javax.servlet.FilterClass<? extends javax.servlet.Filter>不匹配。

进一步检查后,似乎定义GenericFilterBean的类文件没有看到javax.servlet包,所以在我的文件中,它不知道它是什么。

另一个有趣的事情是spring-ws-core依赖于spring-web:4.0.9.RELEASE而我的代码依赖于spring-web:4.3.2.RELEASE,当我查看4.3.2引用中的类时,它可以看到javax.servlet,即GenericFilterBean 4.0.9休息,但4.3.2工作。

另外,如果我这样做

if (authenticationFilter() instanceof Filter);
if (new UsernameAuthenticationFilter() instanceof Filter);

IntelliJ说我可以用!= null替换它们。

当我运行gradlew dependencies时,我可以看到org.springframework:spring-beans:4.0.9.RELEASE -> 4.3.2.RELEASE等依赖项,但IntelliJ会在Gradle Projects视图和项目引用中显示。

我的项目有一个多项目gradle构建,4.0.9依赖项在子项目上。

我尝试了什么

  • 刷新gradle依赖项(通过IntelliJ)
  • 使IntelliJ缓存无效
  • 清理项目(gradlew clean
  • 重新开启IntelliJ
  • 重新安装IntelliJ
  • 重新启动计算机

临时解决方案

根据@Jens的建议,我将compile('javax.servlet:javax.servlet-api:3.1.0')添加到allprojects,现在IntelliJ可以正确地解析它,尽管最好不要对构建文件有“hacky”依赖。

0 个答案:

没有答案