我知道Eclipse("Egit")有一个Git插件,但我喜欢在命令行上做Git的东西,我喜欢用Eclipse编码,所以我想把它们分开。
我克隆了一个 Git 存储库(我认为它不重要,但为了更好地衡量,它https://github.com/spinscale/dropwizard-jobs.git
)。然后,我打开了 Eclipse (Juno) 并创建了一个新的 Java 项目,并选择克隆存储库的根目录作为项目的基本路径。Eclipse问我是否要将项目与Java方面相关联,我单击了"确定"。
这个项目有一个大的依赖树(如果你愿意,可以看看它的4个POM文件)。我不使用 Maven 来构建(我使用 Gradle),所以我只是运行了一个脚本,将这些 POM 的依赖关系解析到一个目录中,然后我在这个 Eclipse 项目中创建了一个lib
目录并将所有 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
相关的所有错误都消失了。
所以我的怀疑得到了证实:这些子文件夹(dropwizard-jobs-core
、dropwizard-jobs-guice
和dropwizard-jobs-spring
)的意图是它们是具有单独类路径的子项目。Eclipse 认为所有这些源文件夹都是同一个项目的一部分,因此它将它们的所有类集中到同一个类路径中。由于每个子项目都使用相同的单元测试命名约定(每个子项目的包/类名相同),因此 Eclipse 认为同一包中的多个类具有相同的名称。
好!我想通了问题所在。但是解决方案是什么?理想情况下,我将能够将所有这些保留在同一项目中,但可能会修改.classpath
文件或执行类似操作,指示 Eclipse 将子项目与类路径分开。有什么想法吗?
简单地下载 eclipse m2e 插件,然后导入项目(考虑到您已经在工作站签出),并花一些时间学习 MAVEN 命令。 在这里,您可以找到Maven父项目和模块的pverview。Maven parent pom vs modules pom
一种可能的解决方案是引入 maven,它允许在多模块 maven 项目中自然定义父项目和子项目。
您实际上可以在 Eclipse 之外测试该配置,然后使用 M2Eclipse 同时(如本答案中所述)在 Eclipse 中导入父级及其依赖项。
实际上,M2Eclipse 项目本身有 guice 测试项目,您可以将其用作您自己的 guive 子项目的模型,在 repo sonatype/m2eclipse-guice
中,具有足够的 pom.xml。