"Duplicate class found" - IntelliJ和.class文件

11
最近我把公司的一个项目导入了 IntelliJ Idea(10.5.1)。我们使用一个 ant 构建脚本来构建和运行该项目,IntelliJ 对此提供了很好的支持。
但是,当编译输出目录等于源代码目录时(即将 .class 文件放置在与其对应的 .java 源文件相同的目录中),IntelliJ 似乎存在明显的问题。
(请注意,我知道这不是正确的做法,但请告诉我的老板。这个项目已经超过 15 年了,规模也相应很大,太多东西依赖它以这种方式存在,我无能为力。)
因此,一旦编译完成,IntelliJ 就会检测到 .class 文件并将它们添加到项目树中。问题在于它会把它们视为类声明,因此每个类都会得到“找到重复的类”消息。虽然这并不影响我的工作,但可以想象这非常让人恼火。
我尝试让 IDE 忽略 .class 文件,但显然这样会使它不加载任何类,包括 JRE 运行时和位于 .jar 文件内部的任何其他类。
有没有办法让 IntelliJ Idea 忽略与其 .java 源文件位于同一位置的 .class 文件?
3个回答

8

确保您已将输出目录配置为源目录,并禁用输出目录的排除以查看您的文件。


1
我确实看到了这些文件,问题是我看到每个文件都有两次(IntelliJ 显示 .java.class 两种)。在源代码视图中,它显示了描述的错误信息“找到重复类” - 从它的角度来看这是正确的,但如果已经存在.java源文件,它应该忽略 .class 文件。至少这就是我尝试达成的目标。 - pdinklag
请提供一个示例项目以便复现。 - CrazyCoder
嗯,我无法通过创建一个最小的示例项目来重现这个问题,即使设置是相同的。我会尝试在项目数据文件本身中找到差异。 - pdinklag
好的,我相当确定这是IntelliJ Idea中的一个错误,我应该向他们报告。当我从现有源创建新项目并使用IntelliJ建议的源路径时,我遇到了这个问题。如果我不这样做,而是在项目创建后手动将相同的路径标记为源路径,则一切都按预期工作。 - pdinklag
2
现在我确定找到了问题所在。问题是我有几个模块。为了启动应用程序,我创建了一个库(项目设置->库),该库还引用了单个模块源路径(因为编译的“class”文件需要在类路径中)。因此,模块源目录被标记为“库”,IntelliJ似乎会像加载“jar”一样处理它们,导致加载“class”文件,这将导致所描述的问题。解决方案是添加模块依赖项,而不是模块的源目录。 - pdinklag

1

当我从Bitbucket克隆项目时,也遇到了同样的问题。要在IntelliJ中解决这个问题:

项目结构 > 模块 > 源代码 > 源代码文件夹 > <<"消除不需要的源代码文件夹">>

在我的情况下,一个源代码文件夹中有未实现的类,而另一个源代码文件夹中有已实现的类(相同的类名)。

我删除了其中一个,重新构建,问题得到了解决。

试试吧!


0
我将我的目标文件夹标记为“生成的源根目录”,取消该标记后问题得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接