1

我知道 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-coredropwizard-jobs-guicedropwizard-jobs-spring

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

4

2 回答 2

1

只需下载 eclipse m2e 插件,然后导入项目(考虑到您已经在工作站签出),并花一些时间学习 MAVEN 命令。在这里您可以找到 maven 父项目和模块的 pverview。Maven 父 pom 与模块 pom

于 2014-12-26T18:25:18.363 回答
0

一种可能的解决方案是引入maven,它允许在多模块 maven 项目中自然地定义父项目和子项目。
您实际上可以在 Eclipse 之外测试该配置,然后在 Eclipse 中同时使用M2Eclipse导入父对象及其依赖项(如本答案中所述)。

实际上,M2Eclipse 项目本身有 guice 测试项目,您可以在 repo 中将其用作您自己的 guive 子项目的模型sonatype/m2eclipse-guice,并带有足够的 pom.xml

于 2014-12-26T18:20:49.483 回答