Intellij将其他类的成员强调为错误,但它编译得很好

时间:2013-11-29 22:54:53

标签: java maven intellij-idea

出于某种原因,我的Intellij IDEA IDE开始强调使用本地类外部的任何内容作为错误。它只针对我编写的包中的项目 - 例如,像java。*这样的包不会显示为错误。即使是joda-time依赖也没有错误亮点,它只是来自我自己的包。这个问题才在我为项目编写pom.xml后才开始出现,所以我假设它与maven有关。

例如,以下行的main为红色,错误为cannot resolve symbol 'main'import main.java.com.jamobox.jamchatserver.clients.ClientReader;

然后在给出一个类作为参数的情况下,例如 public void doSomething(Client c) { .. } 我把东西放了 doSomething(new Client()); 它将突出红色参数中的参数值 doSomething(Client) cannot be applied to doSomething(main.java.com.jamobox.jamchatserver.clients.Client)

正如我所说,代码编译并运行得非常好,它只是认为出错的IDE。我已经尝试了this类似问题中给出的所有答案,但似乎没有任何效果。

任何人对如何解决此问题都有任何想法?

如果它有助于任何人解决这个问题,这是我目前的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>com.jamobox.jamchatserver</groupId>
<artifactId>JamChatServer</artifactId>
<name>JamChat Server</name>
<version>0.2.1</version>

<dependencies>

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.3</version>
        <type>jar</type>
        <optional>false</optional>
    </dependency>

</dependencies>

<build>
  <pluginManagement>
      <plugins>
          <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>2.3.2</version>
              <configuration>
                  <source>1.7</source>
                  <target>1.7</target>
              </configuration>
          </plugin>
      </plugins>
  </pluginManagement>
</build>

</project>

1 个答案:

答案 0 :(得分:5)

当你说'#34;它编译得很好&#34;时,你没有说明你是如何编译的?根据您所描述的内容以及我怀疑的问题,我假设您正在通过maven进行编译。

似乎在声明的源目录和包名称中存在一些不匹配。当您通过IDEA创建(裸骨)Java项目时,它会生成源目录{project.basedir}/src。请注意,在项目视图中,src目录为蓝色,表示它是主要(即生产)源目录:

enter image description here

这也显示在项目结构对话框中:

enter image description here

对于maven项目,路径java中的默认主(ieproduction)源目录为{project.basedir}/src/main/java。然后有一个相应的测试源目录{project.basedir}/src/test/java。 IDEA将测试源目录标记为绿色文件夹。最后,主要和测试resources目录都用于配置文件,图像等。在IDEA 12.x resources目录中被标记为源和测试源目录color作为相应的java目录。在IDEA 13(目前处于测试版并将于12月发布)中,它们被标记为不同的资源目录。

IDEA Project Tree

听起来好像转换为maven时,main\java目录已添加到src目录,com根目录包目录已移至java,但是发生这种情况时,包声明从com.jamobox...更改为main.java.com.janbobox...。这可能是因为当你移动时,src仍被配置为源目录。因此,IDEA看到包名称从com.jamobox...更改为main.java.com.janbobox...,并更改import语句(以及可能的包语句)以匹配。

要修复,您需要执行以下操作:

  1. 使用&#34;重新导入所有Maven项目强制导入maven pom&#34; Maven工具窗口中的按钮Reimport All Maven Projects button(默认情况下在右侧)
    • 如果POM尚未显示,请单击添加按钮add button,导航到pom.xml文件并添加它。然后运行重新导入。
  2. 验证java目录(以及 src目录)是否已标记为项目源,如上面的屏幕截图所示(显示IDEA 12.x和13.x项目树)
    • 如果未标记正确的目录,请尝试重新导入2次或3次。如果这不能解决(它应该),请进入文件&gt;项目结构&gt; [模块]&gt; [来源标签] 并手动配置正确的来源。删除任何无关的。
  3. 验证com根目录包目录是否在src\main\java而非src
  4. 使用package main.java.com
  5. 搜索并替换所有package com个字符串
  6. 使用import main.java.com
  7. 搜索并替换所有import com个字符串

    那应该解决问题。如果仍有红色,请运行文件&gt;使缓存无效并重新启动IDEA。如果之后仍有问题,请修改原始问题并添加项目树和文件&gt;的屏幕截图。项目结构&gt; [模块]&gt; [来源标签] 对话窗口。