当前位置: 首页 > 知识库问答 >
问题:

英特利杰 IDEA 中的代码标记为编译器错误,在 Eclipse 中工作正常

公良泰宁
2023-03-14

我正在尝试设置我的 IntelliJ 工作区,以便在日食项目上进行开发。我遇到的一件事相当令人困惑:

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 {

问题似乎是因为模拟服务器响应实现了收集

我没有改变这些库的选择。我只是试图在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编译器,但该应用程序仍然不能完全编译,并且将无法运行,可能是因为它无法编译该类,因此webapp的整个部分都无法编译。

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


共有1个答案

鲁龙野
2023-03-14
匿名用户

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

  • 只提供Servlet 2.5,或者
  • 您使用的Spring版本与Servlet 3.0兼容。还要确保您的所有Spring依赖项都使用相同的版本。

这种组合应该有效:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-mock</artifactId>
    <version>2.0.8</version>
</dependency>

这也应该:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.1.0.RELEASE</version>
    <scope>test</scope>
</dependency>

但是这将会失败:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.2.RELEASE</version>
    <scope>test</scope>
</dependency>

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

 类似资料:
  • 我最近在部署到我们的共享主机时遇到了问题。从 Visual Studio 通过 Web 部署进行部署时,99% 的时间我在登录后在登录页面或主页上收到此错误。有时我可能会点击几下不同的部分,然后它就会击中。它通常会在几分钟到90分钟后消失。 运行Windows Server 2012 R2 Standard、IIS8和.NET 4.5的Web主机。 Web主机建议我需要使用Visual Studi

  • 请帮帮我!我找不到此问题的任何解决方案 “/”应用程序中的服务器错误。< br >编译错误< br >描述:编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改您的源代码。 编译器错误消息: 编译器失败,错误代码为-2146232576。 显示详细的编译器输出: C:\Windows\System32\inetsrv 版本信息: 微软 .NET 框架版本:4.0.30319;AS

  • 下载并安装API 24源代码后,我看到在API 24中有更改的类中出现了大量编译器错误。 例如,AccessibilityService类在变量、方法、导入等方面有数百个“无法解析符号”错误。

  • 在我的< code>activity_main.xml中,我有一个文本视图: 在我的< code>MainActivity.kt中,我声明了: 英特利J说它找不到要去的声明。我该如何解决这个问题?我看过其他答案,但它们不起作用。

  • 我刚刚在Eclipse(Oxygen 4.7.3a,Ubuntu 18.04上)中用Scala-IDE插件(4.7.0.v-2_12-201709291352-71A28D0)和一个简单的HelloWorld对象建立了一个Scala项目。如果我将“properties->Scala compiler”设置为2.12,那么一切都将按照预期工作:项目将编译并运行。但是如果我选择任何其他版本(例如,“最