【问题标题】:The declared package does not match the expected package ""声明的包与预期的包不匹配“”
【发布时间】:2011-10-23 06:36:20
【问题描述】:

我正在使用 Eclipse,并且有一段时间没有使用 Java。但是,我可以在命令行上编译我的代码并生成必要的.class 文件。在 Eclipse 中,它抱怨 The declared package "Devices" does not match the expected package ""。这是什么意思,我该如何解决?

示例代码:

package Devices;

public final class DevFrequency 
{
    public short messageID;
    public double frequency;
    public short converterID;
    public DevFrequency() 
    {
    }
    public DevFrequency(short _messageID,double _frequency,short _converterID)
    {
        messageID = _messageID;
        frequency = _frequency;
        converterID = _converterID;
    }
}

我的项目名称是DeviceDDS

【问题讨论】:

  • 这个类在/src/Converters目录下吗?
  • 如果您要追溯更改您的问题(老实说,这似乎毫无意义),您需要保持一致 - 您尚未编辑问题的第一段。你还让所有的 cmets 看起来都很奇怪。为什么要在将近一年半之后改变一切?
  • 在我的情况下(使用 VSCode Java 项目管理器扩展),由于某些原因,我不得不手动更改类的包,或者您可以将鼠标指针放在错误下方的红线上,然后点击“快速修复”自动完成。 (当然我不知道这是怎么发生的,因为当你创建一个新文件夹时,VSCode Java 项目管理器会自行处理这个问题,我无法再次复制这个行为)。无论如何。

标签: java eclipse


【解决方案1】:

尝试关闭并重新打开文件。

当文件位置或包声明绝对没有问题时,可能会在 eclipse 中出现此错误。在花费大量时间尝试这些其他解决方案之前先尝试一下。有时日食只是变得混乱。它在很多场合都对我有用。我将the idea 归功于Joshua Goldberg

【讨论】:

  • 在 VS Code 中的 Gradle 项目中遇到了这个问题。重新打开修复它。
  • 在 Eclipse 编辑器中打开和关闭文件有助于解决问题。我在 java config build-source 选项卡中添加了一个源文件夹,错误没有删除,但是当我在 Eclipse 中关闭并打开编辑器时,它有帮助。 :-)
  • 退出并重新启动 eclipse 也解决了这个问题。
  • 嘿嘿..我花了一个小时试图修复它,然后看到了这个。
  • 在我移动了一些东西之后,Vim、CoC 和 coc-java LSP 发生在我身上。重启 vim 解决了这个问题。
【解决方案2】:

Eclipse 期望声明的包与目录层次结构相匹配——因此它期望您的 Java 文件位于源根目录下名为“Devices”的目录中。目前看起来该文件直接位于您的源根目录中。所以创建适当的目录,并将文件移动到那里。

请注意,按照惯例,包是小写的,并以反向 DNS 顺序包含您的组织名称,例如

com.foo.devices;

【讨论】:

  • @Sakti:据我所知,您不能这样做,即使可以,我也强烈建议您不要这样做。 所有经验丰富的 Java 开发人员都希望您遵循常规约定。
【解决方案3】:

解决方案 1:当我从 Eclipse 签出的项目出现此错误“声明的包与预期的包不匹配”时,一种对我有用的解决方案简历:

1.在导航栏右键项目,点击“删除”
2.确保选中“删除磁盘上的项目内容”选项,然后单击“确定”。
3.现在删除项目后,转到文件->导入->常规->现有项目到工作区
4. 从目录列表中选择您的工作区并选中您的项目名称旁边的框。点击“完成

解决方案 2: 我再次收到此错误并显示以下消息

Eclipse 构建错误 - java.lang.Object 无法解析 我不得不按照这里提到的另一条路线,错误就消失了。

与此同时,解决方法是从项目中删除 JRE 系统库,然后重新添加。 步骤如下:

  1. 在构建错误时转到项目的属性(右键单击 > 属性)查看“构建路径”部分中的“库”选项卡 在列表中找到“JRE 系统库”(如果缺少,则此错误消息不是 Eclipse 错误,而是错误配置的项目)
  2. 删除“JRE 系统库”
  3. 点击“添加库...”,选择“JRE 系统库”并为项目添加适当的 JRE(例如“工作区默认 JRE”)
  4. 在库选择中点击“完成”,在项目属性中点击“确定”,然后等待重新构建项目

希望错误能得到解决...

【讨论】:

  • 我也必须这样做(在构建中添加一个 groovy 测试目录)。不要忘记记录您需要重新创建的运行配置。知道为什么需要这样做吗?好痛苦。
  • 更简单的解决方案:我再次遇到这种情况,并且能够通过关闭项目、重新启动 Eclipse 并重新打开项目来使其工作。
  • 更简单!我刚刚又得到了它,它通过关闭并重新打开单个有问题的文件的编辑器而消失了。
  • 重启 eclipse 似乎可以解决问题。
  • 解决方案 1 对我有用。很奇怪。我已经在其他机器上将相同的 git clone 导入到 Eclipse 中,没有看到这个问题。
【解决方案4】:

我通过以下步骤解决了问题:

  1. 选择项目-右键-java构建路径。

  2. 在源选项卡中 - 您将 src 更改为 src/main/java

  3. Eclipse 将对所有项目重新排序。

【讨论】:

    【解决方案5】:

    我遇到了这个问题——我的包中的其他类都很好,但是一个类有错误。包声明没有任何问题。

    我通过refactor->move 修复了它,并将该类暂时移至另一个包,然后将refactor->move 移回原始包。

    【讨论】:

      【解决方案6】:

      我修复它只是将名称更改为小写,现在 Eclipse 可以识别该包。

      【讨论】:

      • 它也适用于 VSCode,谢谢。但是为什么这会引发错误,以及这个 First_char_capitalization 是如何使它工作的?你能告诉我吗?
      【解决方案7】:

      您需要将类放在Devices 文件夹中。

      【讨论】:

        【解决方案8】:

        在您的项目下创建一个名为“Devices”的新包并将您的类放入其中。这相当于将类放置在项目源文件夹中名为“Devices”的目录中。

        【讨论】:

          【解决方案9】:

          通过提及名称

          解决了这个问题

          我移动了包 stepDefinition

          下的文件 Test_Steps.java

          只需添加 package stepDefinition,问题就解决了

          所以当你有一个包并且你没有在你的类文件中使用时,就会出现这个问题。

          添加它已解决问题并且不再出现错误。

          【讨论】:

            【解决方案10】:

            确保 Devices 在项目属性中定义为源文件夹。

            【讨论】:

              【解决方案11】:

              遇到了同样的错误,但我的包裹绝对正确。当我刚刚关闭并打开我的编辑器时,错误消失了。希望这在某些情况下可能会有所帮助。

              【讨论】:

                【解决方案12】:

                我通过在我的.classpath 文件中删除该包的“排除”属性来解决此问题。删除属性,而不是整个标签,否则“src/java”将不再是源文件夹。

                <classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>
                

                【讨论】:

                  【解决方案13】:

                  确保您创建了正确的包。您可能有机会创建文件夹而不是包

                  【讨论】:

                    【解决方案14】:
                    1. 在项目的工作区根目录中创建目录 [your.project.name]。

                    2. 将 *.java 从“src”复制到该目录。

                    3. 关闭并重新打开项目。

                    【讨论】:

                      【解决方案15】:

                      当我在 Eclipse 中从 svn 存储库中签出一个项目时,这发生在我身上。我的 .m2 文件夹中有 Eclipse 没有查看的 jar 文件。要解决我所做的问题:

                      右击项目文件夹配置>转换为Maven项目

                      这样就解决了问题。

                      【讨论】:

                        【解决方案16】:

                        有一百万个答案,但这里有另一个: 将文件复制到新包中,删除旧包并将新包重命名为旧包的名称。

                        【讨论】:

                          【解决方案17】:

                          确保您没有使用默认包。创建一个名为“devices”的新包,并将此代码复制到其中并使用。

                          【讨论】:

                            【解决方案18】:

                            当我从其他包/项目中复制类时,我遇到过这种情况。

                            菜单->项目->清理通常会有所帮助。

                            【讨论】:

                              【解决方案19】:

                              在我的例子中,我在问题选项卡中选择了错误标记并将其删除,因为 Java 的文件主方法正在正确执行。这是 Eclipse Neon 中的一些小故障,它安装了许多插件。

                              【讨论】:

                                【解决方案20】:

                                当我将现有项目导入 Eclipse 时,我也遇到了这个问题。这是一个 gradle 项目,但在导入时,我通过单击 General-> Existing Projects into Workspace 将其作为常规项目导入。为了解决这个问题,我通过以下方式将 Gradle 性质添加到项目中 :::: 右键项目文件夹->配置->添加Gradle Nature

                                【讨论】:

                                  【解决方案21】:

                                  我使用的是 Spring Tool Suite 4。无法找出问题所在。目录结构根据包名。

                                  但是清理项目对我有帮助。

                                  【讨论】:

                                    【解决方案22】:

                                    我在 Eclipse IDE 中的 maven 项目中遇到了同样的问题。我能够通过用正确的格式替换 .classpath 文件来解决它。替换后关闭并打开项目。

                                    .classpath 文件示例

                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <classpath>
                                        <classpathentry kind="src" output="target/classes" path="src/main/java">
                                            <attributes>
                                                <attribute name="optional" value="true"/>
                                                <attribute name="maven.pomderived" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
                                            <attributes>
                                                <attribute name="maven.pomderived" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/webapp">
                                            <attributes>
                                                <attribute name="maven.pomderived" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry kind="src" output="target/test-classes" path="src/test/java">
                                            <attributes>
                                                <attribute name="optional" value="true"/>
                                                <attribute name="maven.pomderived" value="true"/>
                                                <attribute name="test" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
                                            <attributes>
                                                <attribute name="maven.pomderived" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
                                            <attributes>
                                                <attribute name="maven.pomderived" value="true"/>
                                            </attributes>
                                        </classpathentry>
                                        <classpathentry kind="output" path="target/classes"/>
                                    </classpath>
                                    

                                    【讨论】:

                                      【解决方案23】:

                                      您可能想在项目属性中检查您的 Java“构建路径”,如果“源”目录(路径)没有在其中正确设置,那么这将导致其中的所有类都发生此错误。

                                      所以路径必须指定包中源代码所在的“根”(包含)目录...

                                      【讨论】:

                                        猜你喜欢
                                        • 2019-07-10
                                        • 2021-11-12
                                        • 2011-11-29
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2023-01-13
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多