【问题标题】:How to separate subproject classpaths in Eclipse?如何在 Eclipse 中分离子项目类路径?
【发布时间】:2015-02-21 17:44:48
【问题描述】:

我知道 Eclipse 有一个 Git 插件(“Egit”),但我喜欢在命令行上做 Git 的事情,而且我喜欢在 Eclipse 中编写代码,所以我想将它们分开。

我克隆了一个 Git 存储库(我认为它并不重要,但为了更好地衡量,它是 https://github.com/spinscale/dropwizard-jobs.git)。然后我打开 Eclipse (Juno) 并创建了一个新的 Java 项目,并选择了克隆 repo 的根目录作为我项目的基本路径。 Eclipse 询问我是否要将项目与 Java 方面相关联,然后我单击“确定”。

这个项目有一个很大的依赖树(如果你喜欢,看看它的 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)的意图是它们是 sub-具有单独类路径的项目。 Eclipse 认为所有这些源文件夹都是同一个项目的一部分,因此它将它们的所有类集中到同一个类路径中。由于每个子项目使用相同的单元测试命名约定(每个子项目使用相同的包/类名),Eclipse 将同一包中的多个类视为具有相同的名称。

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

【问题讨论】:

  • 为什么在没有解释的情况下投反对票?这是SSCCE,不是骗子,展示了我的(相当广泛的)努力/研究。这是一个有效的问题,恕我直言,请重新考虑否决票,并可能发表评论,说明您对这个问题不满意的原因。如果您的论点是合乎逻辑/合理的,我会考虑重新表述问题,甚至完全删除它!
  • 这是因为这是题外话。您正在寻求 IDE 的帮助,而不是程序本身。虽然这肯定是相关的,但我不会因为下巴骨折而去看牙医。好吧,我会的,因为牙齿也可能会折断,但你明白这个比喻。此外,您提供的不是 SSCCE,因为没有代码,但除此之外,您是正确的。

标签: java eclipse git classpath subproject


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多