IntelliJ:未正确处理源根

maj*_*aja 7 java intellij-idea

我有以下项目结构:

ModuleName (=Content Root)
  |---src
  |    |---com
  |         |---company
  |             |---file1.java
  |             |---file2.java
  |---test-src
  |    |---com
  |         |---company
  |             |---test.java
  |--- .classpath
  |--- .project
Run Code Online (Sandbox Code Playgroud)

这最初是一个 Eclipse 项目,我需要在 IntelliJ 中导入它。

但是,每次我尝试导入它时,IntelliJ 都会与源根文件夹完全混淆。

查看java源文件,我在包声明中收到以下错误:

package com.company;
Run Code Online (Sandbox Code Playgroud)

错误:包名“com.company”与文件路径“src/com.company”不对应

错误:包名“com.company”与文件路径“test-src/com.company”不对应

我在 IntelliJ 中正确地将“src”和“test-src”文件夹标记为源根。但是,它始终认为这些文件夹是包层次结构的一部分。

我在大约 30 个不同的模块中的 3 个中遇到了这个问题。所有模块的结构都相同,我真的看不出为什么 IntelliJ 对大多数模块都有效,但对这三个模块却失败了。

我该如何解决这个问题?

Rob*_*ood 7

为了完整起见 - 如果有人使用类似的设置遇到同样的问题,这里是解决方案:

另一个模块(我们称之为模块 B)依赖于模块 A 生成的 .jar 文件。这通常工作得很好,所需的 .jar 可以在模块 B 的 lib 文件夹中找到。问题是模块 B 的 .classpath 文件(用于将模块导入 IntelliJ)包含以下条目(我假设它是在更早的时候由 eclipse 生成的):

<classpathentry kind="lib" path="lib/ModuleA.jar" sourcepath="/ModuleA/" />

现在似乎 IntelliJ 对这个源路径条目(因为它没有指向有效的位置)感到非常困惑,这以某种方式影响了模块 A 的打包结构。有趣的是(这使得调试和找到实际问题变得非常痛苦)是错误没有出现在有问题的 .classpath 文件所在的模块 B 中(因为 IntelliJ 没有显示警告从 .classpath 文件导入的源无效),而是在父模块 A 中。

删除源路径条目(或将其指向有效位置,即:lib/ModuleA.jar)修复了该问题。