eclipse 3.4(ganymede)包与类型碰撞

我们有一个以例外结束的包

package abcexception; 

我们的代码库在eclipse 3.3之前没有任何问题,但是当我们转移到eclipse 3.4时,它开始给出与这个包有关的错误:

 "The package abcexception collides with a type" 

当我将包名重构为abcexceptions时,没有问题。 这是由于eclipse 3.4中的错误还是有一些设置来纠正这种行为?

这是因为你在abc包中有一个名为exception (带有小写“e”)的类和一个名为abcexception的包。

它导致名称冲突,因为如果你有代码abcexception.doSomething(); – 这是否意味着你想在abcexception类中调用静态doSomething()方法? 或者它是否意味着有一个名为abcexception.doSomething的类,你试图调用它的构造函数?

坚持使用Java命名约定 – 将所有小写包装起来,以大写字母开头的类和以驼峰forms开头 – 你永远不会看到这个问题。

========== ==========编辑

这是出现此错误的唯一正当理由……

它不必直接在您的项目中,它可以在您的项目所依赖的另一个项目或库中。 这应该显示构建路径或项目中任何位置出现的类:在Eclipse工具栏中点击Flashlight查找按钮 – >选择’Java搜索’ – >在搜索字段中输入abcexception – >选择’区分大小写’ – >在“搜索”中选择“类型” – >确保为“搜索范围”选择了所有选项。

您使用的是生成类的任何工具吗? 他们可以将它们放入项目的构建目录中吗? 当您看到错误时,如果您转到项目的构建目录,然后进入a / b / c /目录,您会看到“exception”的.class文件吗?

当然Eclipse通常会有一个错误(虽然我希望Eclipse 3.4中会有一个bug报告,如果它是……你就能找到更多的抱怨),你的Eclipse安装可能会被打破方式(其他任何人都可以在Eclipse 3.4中打开你的项目吗?你能在另一个目录中安装一个干净的Eclipse 3.4吗?错误是否出现在那里?),或者你的项目可能会以某种方式混乱(创建一个没有依赖项的新项目)除了JDK之外,在新项目中创建abcexception包,在项目中创建一个类来import abcexception.*;并查看是否发生错误。)。

在Java中,您不能拥有与包名称相同的类名。

这意味着JDT包必须仅在3.4中强制执行该规则

例如,请参阅错误63668 。


正如Nate评论:

名为Exception的类不会阻止您创建包exception
案件很重要

还记得一个类的全名包括它所包含的包。
所以abSomeClass (类名)与xySomeClass (包名)不同。
这里没有名字冲突。

类名和包名必须在case和package中匹配才会导致此错误。

看到他更准确的答案 。

我在我inheritance的巨大代码库中遇到了类似的问题。 事实certificate,冲突是由JavaDoc链接中的部分限定类名引起的。

换句话说,Eclipse在告诉我在编译abcdLondon时我有一个针对abcd的包/类型冲突。 对abcd代码进行java搜索后发现Eclipse认为abcParis中的JavaDoc注释是匹配的。 JavaDoc评论包含{@ link d.NewYork}。 当我将其更改为{@link abcdNewYork}时,编译错误已解决。

还应该注意的是,NewYork没有导入到Paris类中,因为它只出现在JavaDoc注释中。 这也使得它的缩写forms无法解析,点击评论中的链接不起作用。 使其成为绝对引用也使JavaDoc链接起作用。

我知道这听起来很傻,可能太简单了,但我通过以下方式解决了这个完全相同的错误信息:

  • 删除导致错误消息的包名称的整行。
  • 保存.java文件(这会在同一行触发一个新错误,说明“声明的包”“与预期的包”不匹配“),它应该这样做。
  • 将原始包名重新键入同一行。
  • 保存.java文件。

无法告诉你为什么这样有效,但确实如此,而Eclipse却不再当场发脾气。

安全打字和快速编码。

-Goodge

我改变了eclipse中的一个编译选项,问题就消失了。 在工作空间属性下:Java编译器 – >错误/警告 – >将“未使用的导入”从“警告”更改为“忽略”。

如果你有一个类Foo,你就不能有一个以Foo结尾的包,比如com.my.Foo。
此外,如果您使用maven样式,则您的项目中的资源类似于src / main / resources
资源中的文件夹也具有包样式,此外,您不能拥有包含类名称的文件夹。

根据推荐的约定开发Jenkins插件时,你肯定会遇到这个问题。
如果您遵循Jenkins约定,并且在包xy中名为MyBuilder的类中创建构建器,那么您还应该将.jelly放在名为xyMyBuilder的资源文件夹中。 这将导致上述问题。
但是,如果您将资源文件夹命名为xymyBuilder(请注意myBuilder中的小写’m’),与推荐的约定不同,该插件仍将按预期工作