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

问题描述 投票:47回答:12

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

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

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

有一次它对badugi.client什么都没有,但它只在badugi.server报告了这个错误。我完全不知道它是如何工作的......

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

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

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

intellij-idea packages project-structure
12个回答
48
投票

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

这是一种解决方法:

  1. 将光标定位到带下划线的包语句(package badugi.server
  2. 点击ALT + ENTER
  3. 选择选项Move to package badugi.server。这将自动修复您的目录结构以匹配声明的包

要么

  1. 右键单击Project explorer中的src
  2. 选择New / Package并创建包badugi
  3. 选择客户端和服务器包并将它们拖到badugi包中

0
投票

我在文件夹src下创建了一个解决了这个问题的包。

project structure


0
投票

这在这里很棘手。在我的例子中,文件夹结构是:

COM / APPNAME / rateUS /模型/ FileName.java

我在FileName.java文件中指定的包名是:

package com.appName.rateUs.models;

请注意包名称之间的细微差别:它应该是rateUS而不是ratesUs

希望这有助于某人!


-3
投票

可以告诉Intellij忽略此错误。

单击文件>设置>编辑器>检查,然后在右侧搜索“错误的包语句”(在Java下,可能的错误)并取消选中它。


35
投票

我有同样的问题,并通过修改我的项目的.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>

在导入此项目时,以某种方式将包文件夹指定为根源目录。


12
投票

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


7
投票

将其添加到pom.xml(在project标签内)

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

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


4
投票

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


1
投票

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

在更新之后,maven编译工作顺利但Intellij报告了特定包上的所述错误(具有类似特征的其他包不受影响)。

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

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

也许知道intellij工作区文件的人可以对此发表评论吗?

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

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


0
投票

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


0
投票

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

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

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

问题是如果你有Scala对象,你必须确保文件中的第一个对象与文件名具有相同的名称,因此解决方案是移动文件中的对象。


0
投票

Kotlin

对于使用遵循docs包约定的Kotlin的人:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.