为什么eclipse项目的源目录中的xml文件被复制到target / classes目录?

时间:2015-07-15 13:06:05

标签: java eclipse

我在eclipse项目的源目录中有xml文件,如:

src/java/main/com/xx/zz.xml

1.当使用eclise自动构建时,xml文件将被复制到目标/类。

2.使用'mvn complie'时,xml文件复制到目标/类。

对于第二种情况,我发现了这一点:why xml files in eclipse project's source directory is not copied to target/classes directory?

但是对于第一种情况,我找不到任何文件。 有人可以帮我解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

Eclipse与独立Maven的工作方式完全不同。 Maven使用JDK的javac。默认情况下,javac仅处理.java个文件,并在与.java源相同的目录中生成.class文件。 Maven要求它在一个单独的目录中生成类,javac只在那里移动.class文件。

这样做的原因是javac使您可以更自由地组织源文件,而不是大多数开发人员使用。例如,javac并不关心您的类是否位于模仿声明的包的文件夹结构中。您可以将多个.java文件与其他文件(如.properties.xml放在同一文件夹中,将模块放在一起。您的.java文件可以具有不同的包声明。例如,您可以拥有文件A.java:

package aaa.bbb;
class A {}

和B.java:

package zzz.uuu;
class B {}

如果您要求javac将类放在目标目录中,它将为.class文件创建必要的子文件夹,这将类似于包结构。但是它不能对属性和xml文件执行此操作,因为它们不包含包声明。这样的资源'管理留给构建工具。

Maven希望您将这些资源放在另一个源文件夹(资源)中。它们将被复制到生成的包结构中,因此您应该在资源文件夹中将其匹配。这就是为什么它不会在源文件夹中复制非java文件。

Eclipse希望您将偶数.java文件放在目标包结构中,如果您的包声明没有反映文件的相对路径,则会抱怨。与裸javac相比,这是您的自由度较低的地方。由于这个规则,它可以复制资源和.class文件,而不需要另一个资源'文件夹中。

您可以将Eclipse配置为使用源文件夹作为输出文件夹。在这种情况下,Eclipse不会触及资源。