我知道 Eclipse 有一个 Git 插件(“Egit”),但我喜欢在命令行上做 Git 的东西,而且我喜欢在 Eclipse 中编写代码,所以我想将它们分开。
我克隆了一个 Git 存储库(我认为它并不重要,但从好的方面来说,它是https://github.com/spinscale/dropwizard-jobs.git
)。然后我打开 Eclipse (Juno) 并创建了一个新的 Java 项目,并选择了克隆 repo 的根目录作为我项目的基本路径。Eclipse 询问我是否要将项目与 Java 方面相关联,然后我单击“确定”。
这个项目有一个很大的依赖树(如果你喜欢,查看它的 4 个 POM 文件)。我不使用 Maven 来构建(我使用 Gradle),所以我只是运行了一个脚本,将这些 POM 的依赖关系解析到一个目录中,然后我lib
在这个 Eclipse 项目中创建了一个目录并将所有 JAR 复制到其中。然后我将所有这些 JAR 添加到项目的类路径中。
我现在在 Eclipse 的“问题”视图中看到 10 个错误,它们都是类似的错误:
- ApplicationStartTestJob 类型已定义 ApplicationStartTestJob.java /dropwizard-jobs/dropwizard-jobs-core/src/test/java/de/spinscale/dropwizard/jobs 第 10 行 Java 问题
- ApplicationStartTestJob 类型已经定义 ApplicationStartTestJob.java /dropwizard-jobs/dropwizard-jobs-guice/src/test/java/de/spinscale/dropwizard/jobs 第10行Java问题
- 还有8个都是这样的,等等。
果然,当我展开整个项目时,我看到它有以下结构:
dropwizard-jobs/
dropwizard-jobs-core/
src/test/java/
de.spinscale.dropwizard.jobs
ApplicationStartTestJob.java
dropwizard-jobs-guice
src/test/java/
de.spinscale.dropwizard.jobs
ApplicationStartTestJob.java
dropwizard-jobs-spring
src/test/java/
de.spinscale.dropwizard.jobs
ApplicationStartTestJob.java
所以看起来这个项目的维护者喜欢用完全相同的包/类名重命名他们的单元测试,并且出于某种原因,Eclipse 认为它们都属于同一个包。为了测试这一点,我将其重命名dropwizard-jobs-core/src/main/java/de.spinscale.dropwizard.jobs.ApplicationStartTest
为其他东西,并且确实做了同样的事情dropwizard-jobs-guice/src/main/java/de.spinscale.dropwizard.jobs.ApplicationStartTest
,所有与ApplicationStartTest
已定义相关的错误都消失了。
所以我的怀疑得到了证实:这些子文件夹(和)的意图是它们是具有单独类路径的子项目。Eclipse 认为所有这些源文件夹都是同一个项目的一部分,因此它将它们的所有类集中到同一个类路径中。由于每个子项目使用相同的单元测试命名约定(每个子项目使用相同的包/类名称),Eclipse 将同一包中的多个类视为具有相同的名称。dropwizard-jobs-core
dropwizard-jobs-guice
dropwizard-jobs-spring
好,好!我解决了这个问题。但解决办法是什么?理想情况下,我可以将所有这些都保存在同一个项目中,但可能会修改.classpath
文件或执行类似的操作来指示 Eclipse 将子项目与类路径透视图分开。有任何想法吗?