Eclipse java项目,其中目录结构!=包结构

Eclipse java项目,其中目录结构!=包结构,java,eclipse,package,Java,Eclipse,Package,我想使用Eclipse处理一个目录结构与包结构不完全对应的Java项目 例如,包a.b.c中的源文件位于目录x/y/c中。叶包的名称(c)始终对应于直接包含目录的名称(也是c),但它们的前缀可能不同(a.b与x/y) (我认为项目的构建系统将源文件复制到与包结构相对应的目录结构中,但我需要对原始文件进行操作,而不是复制的文件。) 当我在Eclipse中查看这个项目中的源文件时,我看到表单的错误,声明的包“a.b.c”与预期的包“x.y.c”不匹配,并且它也无法解析表单的导入import a.b.

我想使用Eclipse处理一个目录结构与包结构不完全对应的Java项目

例如,包
a.b.c
中的源文件位于目录
x/y/c
中。叶包的名称(
c
)始终对应于直接包含目录的名称(也是
c
),但它们的前缀可能不同(
a.b
x/y

(我认为项目的构建系统将源文件复制到与包结构相对应的目录结构中,但我需要对原始文件进行操作,而不是复制的文件。)

当我在Eclipse中查看这个项目中的源文件时,我看到表单
的错误,声明的包“a.b.c”与预期的包“x.y.c”
不匹配,并且它也无法解析表单的导入
import a.b.foo
。如何将从
x/y
a.b
的映射告知Eclipse并消除这些错误


请不要建议任何涉及更改包声明或移动文件的解决方案。我也做不到。

这在Java中是不可能的,运行时系统总是在包a.b.c中寻找a/b/c作为特定类的目录结构。请参见我认为,唯一的选择是创建一个默认的“ANT”目标,它将内容从
x\y\c
复制到
a\b\c
。将此ANT目标附加到Eclipse构建中。此外,使用
a\b\c
作为java源代码,并从源代码中删除
x\y\c
,因为这将导致编译错误

这将允许您在驻留在
x\y\c
中的文件中工作,但立即从
a\b\c
复制并使用它们


使用:、和任务详细信息以供进一步参考。

这是Java的工作方式。你不能改变这一点。如果不更改语言,就无法消除错误。C#使用不依赖于目录结构的名称空间。尝试以C#的形式重写。您必须使用一个生成文件。@DaveNewton:我该怎么做?所讨论的代码属于一个大型开源项目(Mozilla)。当然他们知道自己在做什么?而且,我完全不相信Java运行时系统的这种行为意味着不可能教Eclipse路径翻译。也许我没有正确理解你的问题:你有一个类,a.b.c.ClassName,你想把它放在一个目录x/y/c/ClassName.jva[class]中?也许您为项目指定的源根目录错误,这可能会导致此类问题。让我举一个具体的例子:在源代码发行版中,有一个文件位于
mobile/android/base/gfx/GeckoLayerClient.java
。文件的包声明是
package org.mozilla.gecko.gfx。Eclipse抱怨:
声明的包“org.mozilla.gecko.gfx”与预期的包“mobile.android.base.gfx”
不匹配。如果我从源代码中删除
x/y/c
,这不意味着我在Eclipse中打开了一些文件
Foo.java
,它将打开
a/b/c/Foo.java
,而不是
x/y/z/Foo.java
?我不希望这样。您可以始终使用“打开资源”选项(CTRL+SHIFT+R)从x/y/z打开文件。或者使用
ANT
目标先复制,然后从编译到复制的文件夹,并禁用Eclipse的默认生成。这样,您可以在x\y\z上工作,但在幕后,它将使用a\b\c。