包名称与文件路径不对应 - IntelliJ

时间:2014-10-18 14:09:32

标签: intellij-idea packages project-structure

我正在尝试从VCS导入项目(好吧,我实际上是第一次这样做)这是我的(导入)项目的结构:

The file structure

顺便说一句。在多次尝试更改这些目录的属性(在其上下文菜单中)之后,将显示此屏幕。

在这些源文件中,我有以下错误:

The error in the editor

有一次它没有反对badugi.client,但只在badugi.server报告了此错误。我完全不知道它是如何运作的......

同样目录中的类也看不到对方。

Error

这是来自ClientWorker类的代码,位于Server所在目录中(如第一张图片所示),因此它应该知道Server是什么。< / p>

我很确定这段代码在我朋友的IDE中运行良好。如何配置IntelliJ以使其工作?

16 个答案:

答案 0 :(得分:48)

从目录结构来看,你有两个包客户端和服务器,但代码需要包badugi.client和badugi.server。

以下是解决问题的方法:

  1. 将光标定位到带下划线的包语句(package badugi.server
  2. 点击 ALT + ENTER
  3. 选择选项移至包badugi.server 。这将自动修复您的目录结构以匹配声明的包
    1. 右键单击Project explorer中的src
    2. 选择新建/打包并创建包badugi
    3. 选择客户端和服务器软件包并将其拖到badugi软件包

答案 1 :(得分:32)

我遇到了同样的问题,并通过修改项目的.iml文件修复了它:

自:

<content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$/src/wrong/entry/here" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
  <excludeFolder url="file://$MODULE_DIR$/target" />
</content>

要:

<content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
  <excludeFolder url="file://$MODULE_DIR$/target" />
</content>

导入此项目时,软件包文件夹被指定为根源目录。

答案 2 :(得分:12)

我也看过几次这个错误,我总是能够通过正确识别项目的模块设置来解决它。在IntelliJ中,右键单击顶级项目 - &gt; “打开模块设置”。这应该打开一个窗口,其中整个项目结构和内容被标识为“源文件夹”,“测试源文件夹”等。确保这些设置正确。对于“源文件夹”,确保该文件夹是您的src /或src / java(或您的源语言),视情况而定

答案 3 :(得分:6)

将此添加到pom.xmlproject标记内)

<build>
  <sourceDirectory>src/main/java</sourceDirectory>
</build>

src/main/java是您要设置的源文件夹。如果您的pom.xml文件中已有此行,请检查它是否正确。

答案 4 :(得分:4)

你应该在模块部分的项目结构(Ctrl + Alt + Shift + s)中声明你的文件夹中哪些是源包(蓝色),哪些是测试......

答案 5 :(得分:1)

由于损坏或可能过时的intellij文件,我遇到了同样的问题。在更新到14.0.2之前,我有一个完美的工作项目,其中包含正确命名的包和文件层次结构。

更新后,maven编译工作顺利,但Intellij报告了特定包装上的错误(其他具有相似特性的包装没有受到影响)。

我没有打算进一步调查,但我删除了我的.iml文件和.idea文件夹,无效的缓存,重新启动了IDE,并重新打开了项目,依赖于我的maven配置。

注意:这样可以有效删除运行和调试配置!

也许有人了解intellij工作区文件可以对此发表评论吗?

对于那些进一步搜索的人的另一个评论:SC管理项目中的重构可能会留下灰尘 - 我碰巧有一个“旧”文件夹,它重复了当前的包结构。如果.iml或.idea文件对这些包有任何引用,那么intellij可能会与旧包的引用混淆。祝好运,StackExchangers同事。

更新:我删除了引用的maven项目中的一些文件并返回了怪癖。所以,我的帖子绝不是最后的答案。

答案 6 :(得分:0)

我只是在与类似的问题作斗争。我解决它的方法是设置Intellij模块的根源文件以匹配原始项目根文件夹。然后我需要在项目导航面板中标记一些文件夹为Excluded(不应该在新项目中使用的那个,对我来说它是在Android下使用的部分)。这就是全部。

答案 7 :(得分:0)

也许某人遇到了我对Scala项目的类似警告。

  

包名称与目录结构不对应,这可能会导致解析此文件中的类时出现问题   检查包含与包结构不对应的包语句的文件。

该文件位于正确的位置,因此IDE提供的帮助程序解决方案无效enter image description here 移动文件说文件已经存在(这是真的),重命名包实际上会将它移动到不正确的包。

问题是如果你有Scala对象,你必须确保文件中的第一个对象与文件名同名,所以解决办法就是移动文件中的对象。

答案 8 :(得分:0)

科特林

对于遵循docs软件包约定的使用Kotlin的用户:

  

在纯Kotlin项目中,推荐的目录结构应遵循包结构,并省略公共根包(例如,如果项目中的所有代码都在“ org.example.kotlin”包及其子包中,则包含“ org.example.kotlin”包应直接放在源根目录下,“ org.example.kotlin.foo.bar”中的文件应位于源根目录的“ foo / bar”子目录中。

IntelliJ doesn't support this yet。您唯一可以做的就是禁用此警告,并接受IDE在更改文件夹/文件结构时不会帮助您进行重构。

答案 9 :(得分:0)

我在src文件夹下创建了一个程序包,即可解决此问题。

project structure

答案 10 :(得分:0)

这很棘手。就我而言,文件夹结构为:

  

com / appName / rateUS / models / FileName.java

我在文件FileName.java中指定的程序包名称为:

package com.appName.rateUs.models;

请注意软件包名称之间的细微差别:应该是 rateUS ,而不是rateU s

希望这对某人有帮助!

答案 11 :(得分:0)

我遇到了类似的错误,就我而言,修复程序是从项目名称中删除了“-”字符。我使用了 my-app

而不是 MyApp

答案 12 :(得分:0)

对我来说,问题是我已经将一个包重构为不同的名称,并且出于某种原因 IntelliJ 恢复了它(即使包名称,就 git 跟踪而言,并没有改变)。我再次将其重构为新名称并解决了问题。

答案 13 :(得分:0)

只需创建另一个 Package 并将所有文件夹移动到它的 !所有错误都将删除

答案 14 :(得分:0)

最简单的解决方案就是重命名每个类中的第一行。

例如

Package name does not correspond to the file path

IntelliJ 告诉我们包名应该是“module09.nationalratswahlen”

当前名称是“oop2.module09.nationalratswahlen”

只需按 Control-Shift-R 并在所有文件中将“oop2.module09”替换为“module09”。但是,通常您应该通过 File > New > Project from Version control 克隆一个存储库。那么你就可以避免这些问题。

答案 15 :(得分:-3)

可以告诉Intellij忽略此错误。

档案&gt;设置&gt;编辑&gt;检查,然后在右侧搜索“错误的包声明”(Under Java,Probable Bugs)并取消选中它。