如何在Eclipse中分离子项目类路径?

时间:2014-12-23 14:56:55

标签: java eclipse git classpath subproject

我知道有一个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个错误,它们都是类似的错误:

  • 类型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-coredropwizard-jobs-guicedropwizard-jobs-spring)的意图是他们的是子项目具有单独的类路径。 Eclipse认为所有这些源文件夹都是同一个项目的一部分,因此它将所有类都集中到同一个类路径中。由于每个子项目使用相同的单元测试命名约定(每个子项目的相同包/类名称),因此Eclipse会在同一个包中看到多个具有相同名称的类。

好的,好的!我解决了这个问题。 但是解决方案是什么?理想情况下,我可以将所有这些保留在同一个项目中,但可能会修改.classpath文件或执行类似操作,以指示Eclipse保持子项目与类路径透视图。有什么想法吗?

2 个答案:

答案 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子项目的模型。