声明的软件包与预期的软件包“”不符


89

我正在使用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


2
此类在/src/Converters目录中吗?
杰里米

6
如果您要追溯性地更改问题(老实说,这似乎毫无意义),则需要保持一致-您尚未编辑问题的第一段。您还使所有评论看起来都很奇怪。为什么要在一年半后改变一切?
乔恩·斯基特

Answers:


52

Eclipse希望声明的包与目录层次结构匹配-因此,它希望Java文件位于源根目录下的“ Devices”目录中。目前,该文件似乎直接位于您的源根目录中。因此,创建适当的目录,然后将文件移到该目录中。

请注意,通常,软件包使用小写字母,并以反向DNS顺序包含您的组织名称,例如

com.foo.devices;

3
@Sakti:据我所知,你不能做到,我强烈建议你不要这样做。所有有经验的Java开发人员都希望您遵循正常的约定。
乔恩·斯基特

88

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

当文件位置或包声明绝对没有错误时,有可能在Eclipse中出现此错误。在花费大量时间尝试其他解决方案之前,先尝试一下。有时,月食只会变得混乱。它在很多场合都为我工作。我的信用理念,以约书亚·戈德堡


2
VS Code内的Gradle项目遇到此问题。重新打开固定它。
TastyWheat

1
在Eclipse编辑器中打开和关闭文件有助于解决该问题。我在java config build-source选项卡中添加了一个源文件夹,该错误并未消除,但是当我在eclipse中关闭并打开编辑器时,它有所帮助。:-)
JassJava

退出并重新启动Eclipse也解决了该问题。
唐·史密斯

他他..我花了一个小时试图修复它,然后看到了。
维卡什

44

解决方案1:当我从Eclipse CVS中检出的项目发生此错误“声明的软件包与预期的软件包不匹配”时,一种对我有用的解决方案:

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

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

Eclipse构建错误-无法解析java.lang.Object, 我不得不遵循此处提到的另一条路线,错误消失了。

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

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

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


我也必须这样做(向构建中添加一个常规测试目录)。不要忘了在运行配置上做笔记,您需要重新创建。知道为什么需要这样做吗?好痛苦
约书亚·戈德堡

11
更简单的解决方案:我再次处于这种情况,并且可以通过关闭项目,重新启动Eclipse并重新打开项目来使其工作。
2013年

12
更简单!我刚刚有了它,它通过关闭并重新打开单个有问题的文件的编辑器而消失了。
Joshua Goldberg 2013年

4
重新启动Eclipse似乎可以解决此问题。
Mike R

解决方案1对我有用。很奇怪。我已经将相同的git clone导入到其他机器上的Eclipse中,但没有看到此问题。
dnuttle

13

我按照以下步骤解决了问题:

  1. 选择项目-右键单击-Java构建路径。

  2. 在源标签中-将更src改为src/main/java

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


11

我遇到了这个问题-程序包中的其他类都很好,但是其中一个类对此有错误。包声明没有错。

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



2

在名为“ Devices”的项目下创建一个新程序包,并将您的类放入其中。这等效于类放在项目源文件夹中名为“设备”的目录中。



1

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


1

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

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

1

通过提及名称解决了该问题

我移动了文件Test_Steps.java,该文件位于package stepDefinition下

在此处输入图片说明

通过仅添加包stepDefinition即可解决问题

因此,当您有一个包并且没有在类文件中使用时,可能会发生此问题。

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

在此处输入图片说明


0

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


0
  1. 在项目的工作区根目录中创建目录[your.project.name]。

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

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


0

当我从Eclipse的svn存储库中检出项目时,这发生在我身上。在我的.m2文件夹中有一些eclipse不在的jar文件。要解决此问题,我做了:

右键单击项目文件夹“配置”>“转换为Maven项目”

这样就解决了问题。


0

有100万个答案,但这是另一个答案:将文件复制到新软件包中,删除旧软件包,然后将新软件包重命名为旧软件包的名称。


0

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


0

从其他程序包/项目复制类时,我遇到了这种情况。

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


0

就我而言,由于Java的文件main方法已正确执行,因此我在“问题”选项卡中选择了错误标记并将其删除。在Eclipse Neon中,由于安装了许多插件,因此存在一些故障。


0

当我导入一个现有的项目以使其黯然失色时,我也遇到了这个问题。这是一个gradle项目,但是在导入时,我通过单击General-> Existing Projects到Workspace将其作为常规项目导入。为了解决这个问题,我通过::::将Gradle Nature添加到了项目中:右键单击Project文件夹-> Configure-> Add Gradle Nature


0

我使用的是Spring Tool Suite4。无法解决问题。目录结构是根据包名称确定的。

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


0

我在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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.