IDEA内部java编译器错误_java – IntelliJ IDEA中的代码标记有编译器错误,它在Eclipse中工作正常...

我正在尝试设置我的IntelliJ工作区以在eclipse项目上进行开发.我遇到的一件事情令人困惑:

Error:(24, 8) java: SomeClass.java:24: getHeader(java.lang.String) in org.springframework.mock.web.MockHttpServletResponse cannot implement getHeader(java.lang.String) in javax.servlet.http.HttpServletResponse; attempting to use incompatible return type

found : java.lang.Object

required: java.lang.String

问题是以下类定义:

public class SomeClass extends MockHttpServletResponse {

问题似乎是因为MockHttpServletResponse实现了Collection< String> getHeaders(String)作为公共列表getHeaders(String name).在这里,我可以看到实现方法使用原始List,其中父级请求使用String键入的泛型Collection.除了可能不是类型安全之外,为什么IntelliJ会将此标记为编译器错误而不是警告?

我无法更改任何这些库.我只是试图在IntellJ 14中完成已经工作的东西而没有Eclipse 4.3中的抱怨.

编辑:

我已经更新到IntelliJ 15.0,该项目现在使用Java 1.7而不是1.6.我仍在使用IntelliJ遇到这个问题,但问题并非在Eclipse中出现.我可以通过IntelliJ使用现有的Ant脚本编译项目,但我无法通过IDE进行调试.

这是我的班级定义

public class ExecutableServletResponse extends MockHttpServletResponse {

...

以下是我的“消息”窗格中显示的错误:

Error:(24, 8) java: getHeader(java.lang.String) in org.springframework.mock.web.MockHttpServletResponse cannot implement getHeader(java.lang.String) in javax.servlet.http.HttpServletResponse

return type java.lang.Object is not compatible with java.lang.String

项目SDK使用的是1.7版本(准确地说是1.7.0_79).语言级别为7.模块SDK和语言级别与项目匹配.

我已经尝试过使用eclipse编译器,但是app仍然没有完全编译,并且无法运行,因为它无法编译这个类,并且webapp的整个部分都不会因此而编译.

这是我的错误FWIW的屏幕截图:

h3pSB.png

解决方法:

您在类中看到错误,但真正的问题是Spring模拟库与您正在使用的Servlet规范不兼容.如果您升级到Servlet 3.0规范(或添加了一个以传递方式提取它的依赖项),则可能会发生这种情况.检查您的依赖项并确保:

>仅提供Servlet 2.5,或

>您使用的是与Servlet 3.0兼容的Spring版本.还要确保所有Spring依赖项都使用相同的版本.

这种组合应该有效:

javax.servlet

servlet-api

2.5

provided

org.springframework

spring-mock

2.0.8

应该这样:

javax

javaee-web-api

6.0

provided

org.springframework

spring-test

3.1.0.RELEASE

test

但这会失败:

javax.servlet

servlet-api

2.5

provided

org.springframework

spring-test

4.2.2.RELEASE

test

它在Eclipse中工作但在IntelliJ中工作的事实表明您有多个依赖项提供相同的类.无法保证系统将使用哪个jar来加载类.这可能是因为你的类路径上同时有servlet-api和javaee-web-api,或者你的类路径上同时有spring-mock和spring-test.在2.0.8版本之后,spring-mock中的类被转移到spring-test,只有版本3.1.0.RELEASE和更高版本的spring-test与Servlet 3.0兼容.

标签:java,eclipse,intellij-idea,spring,servlets

来源: https://codeday.me/bug/20190611/1222208.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值