我知道有一个Eclipse的Git插件(“Egit”),但我喜欢在命令行上做Git的东西,我喜欢用Eclipse编写代码,所以我想把它们分开。
我克隆了一个Git回购(我不认为它很重要,但从好的角度来看,它是https://github.com/spinscale/dropwizard-jobs.git
)。然后我打开Eclipse(Juno)并创建了一个新的Java项目,并选择了克隆repo的根目录作为我项目的基本路径。 Eclipse问我是否想要将项目与Java facet相关联,然后单击“确定”。
这个项目有一个很大的依赖树(如果你愿意,可以查看它的4个POM文件)。我没有使用Maven构建(我使用Gradle)所以我只是运行了一个脚本来解析这些POM的依赖关系到一个目录中,然后我在这个Eclipse项目中创建了一个lib
目录并复制了所有JAR进去。然后我将所有这些JAR添加到项目的类路径中。
我现在在Eclipse中的 Problems 视图中看到10个错误,它们都是类似的错误:
果然,当我扩展整个项目时,我发现它具有以下结构:
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保持子项目与类路径透视图。有什么想法吗?
答案 0 :(得分:1)
只需下载eclipse m2e插件,然后导入项目(考虑到你已经在你的工作站检出),并且花一些时间学习MAVEN命令。在这里,您可以找到maven父项目和模块的概述。 Maven parent pom vs modules pom
答案 1 :(得分:0)
一种可能的解决方案是引入maven,它允许在多模块maven项目中自然地定义父项目和子项目。
您实际上可以在Eclipse之外测试该配置,然后使用M2Eclipse以便在Eclipse中同时导入父及其依赖项(如this answer中所述)。
实际上,M2Eclipse项目本身有guice测试项目,你可以在repo sonatype/m2eclipse-guice
中使用adequate pom.xml作为你自己的guive子项目的模型。