Java 在eclipse中,如何让一个项目覆盖另一个项目的类文件

Java 在eclipse中,如何让一个项目覆盖另一个项目的类文件,java,eclipse,project,projects-and-solutions,eclipse-luna,Java,Eclipse,Project,Projects And Solutions,Eclipse Luna,(月食) 假设我有以下“项目A”: 我还有另一个“项目B”,它试图作为一个实验项目,使用项目A作为依赖项。因此,项目B取决于项目设置中的项目A。项目B如下所示: Project B x.y.z.package3 Main.java (然后它使用项目A中的许多类,Main.java包含application Main()例程) 这当然很好。但是,如果我想让项目B尝试从项目a更改一个类,并让它完全替换它,该怎么办。例如: Project B x.y.z.packag

(月食)

假设我有以下“项目A”:

我还有另一个“项目B”,它试图作为一个实验项目,使用项目A作为依赖项。因此,项目B取决于项目设置中的项目A。项目B如下所示:

Project B
    x.y.z.package3
        Main.java
(然后它使用项目A中的许多类,Main.java包含application Main()例程)

这当然很好。但是,如果我想让项目B尝试从项目a更改一个类,并让它完全替换它,该怎么办。例如:

Project B
    x.y.z.package3
        Main.java
    a.b.c.package2
        Four.java      <-----this is to replace the Four.java in Project A
项目B
x、 y.z.包装3
主类
a、 b.c.包装2

因此,在类路径中有两个Four.class文件。当jvm需要它首先使用的类时,如果类路径上有多个具有相同完全限定名的类,它可以找到。 因此,如果您希望项目A的Five.java引用项目B'Four.java,那么必须使项目B类位于类路径的第一位
在月食中去

Project B Properties > Build Path > "Order and Export"


使用向上/向下按钮将项目B移动到项目A上方,这样,项目B将位于CLAPATH中的第一位

这不是特定于eclipse的问题。重写整个类依赖于类在类路径中排序和在运行时加载的机制。您需要编写自己的类加载器…为什么要这样做?我是说你想做什么。@noone,no,不是classloader。这是一个eclipse问题:类之间的关系仍然由eclipse控制,而不是底层JDK。JDK不需要知道eclipse交给它的包之外的包中有什么。它不是目录的概念,因为一些IDE根本不使用名义上的“目录就是包”。90年代后期,我在VisualCafe for Java中完成了类似的“重写”。我试图理解…如果Project B的Five.Java指的是Four.Java,您希望发生什么。我的意思是Project B…我复制粘贴了您在问题中的最后一句话。好的,非常感谢您的帮助。我对此有点困惑,因为现在它似乎在没有对订单和出口面板做任何事情的情况下工作。另外,我看不到您看到的内容(B/src),我只看到项目名称。进一步的困惑:为什么现在可以工作而以前没有?在问我的问题之前,我测试了所有这些。如果它只是在B/4覆盖A/4的情况下“起作用”,我一开始就不会来这里了。这就是VisualSafe在IIRC看来的表现,这是理想的。@tgm1024我理解的方式是,您希望在项目B中重写项目a中的类。默认情况下,项目B应始终位于类路径的第一位(即项目B的类路径)。项目A应该在那之后。这就是为什么你实际上不需要改变任何东西的原因。@noone,是的,我是在那个假设下操作的,但收到了一条错误消息,因此我首先出现在这里。类似于“期待a.b.c.4并获得a.b.c.4”的东西,但更多的是类型不匹配。我真的不明白。我也同样被一个依赖项目搞砸了,这个项目需要积极地开放以供查看,但事实并非如此。我真的对那些看起来不确定的事情感到不舒服,即使这实际上是驾驶舱的错误。先生们,别误会我:我想这是我的错。我只是不喜欢不理解它,而且我似乎也不能重复这个错误。我创建了两个名为“A”和“B”的项目。“订单和导出”视图将项目及其依赖项显示为项目名称。它们的顺序与运行时在类路径中的顺序相对应。默认情况下,“B”是第一个,而“A”是第二个(依赖项总是紧跟其后)。有趣的是,如何获得默认行为,就像它们被交换一样。
Project B Properties > Build Path > "Order and Export"