【问题标题】:IntelliJ: Source root is not handled correctlyIntelliJ:源根未正确处理
【发布时间】:2017-10-09 12:20:18
【问题描述】:

我的项目结构如下:

ModuleName (=Content Root)
  |---src
  |    |---com
  |         |---company
  |             |---file1.java
  |             |---file2.java
  |---test-src
  |    |---com
  |         |---company
  |             |---test.java
  |--- .classpath
  |--- .project

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

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

查看java源文件,包声明报如下错误:

package com.company;

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 仔细检查上面或下面没有其他文件夹被标记为源根目录,只有src。如果问题依旧,请分享Minimal, Complete, and Verifiable example
  • 上面没有源文件夹。此外,创建一个可验证的示例是不可能的:当创建一个新的 IntelliJ 项目并从头开始导入模块时,它通常可以正常工作。但是过了一段时间(有时是几分钟,有时是几小时或几天),它突然中断并且问题再次出现。我很确定这是 IntelliJ 中的一个错误,但我不知道它是如何触发的,因此我不知道如何解决它。
  • 注意:我已经花了几天时间试图解决这个问题。清除 IntelliJ 缓存,重新安装 IntelliJ,从头开始重新创建整个模块,使用另一台 PC 总是会导致同样的问题。很多时候它在开始时有效,但在一段时间后它再次中断。但同样 - 仅适用于某些特定模块 - 其中绝大多数都可以。
  • 此问题在此处跟踪:youtrack.jetbrains.com/issue/IDEA-244279。遇到此错误的任何人都可以尝试此链接中的“可能的解决方法”部分来解决此问题。

标签: java intellij-idea


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我在哪里可以找到这个必须进行更改的 .classpath 文件?
  • .classpath 文件被我们从中导入源代码的原始 Eclipse 项目使用。通常它位于每个项目/模块的根文件夹中。
  • 在 IntelliJ idea 中,当我导入在 eclipse 中创建的项目时,我遇到了与上面提到的相同的问题。但我在根目录中看不到任何 .classpath 文件。我看到的只是根文件夹中的一个 .iml 文件。
  • TBH 我不记得所有细节了,因为这个问题已经有 2 年了。但我建议查看您的 .iml 文件。我想其中一个条目与其他条目不同,并且看起来很奇怪(路径不正确)。或者查看原始的 .classpath 文件(在导入 IntelliJ 之前,并在那里修复问题(删除无效的类路径条目)
  • 哦,是的,看看所有的项目 - IIRC 错误实际上并没有出现在 .iml 文件损坏的项目中,而是出现在依赖项目中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2014-08-31
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多