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

Java 为什么eclipse项目的源目录中的xml文件被复制到target/classes目录?,java,eclipse,Java,Eclipse,我在eclipse项目的源目录中有xml文件,如: src/java/main/com/xx/zz.xml 1.使用eclise自动生成时,xml文件会复制到目标/类 2.使用“mvn complie”时,xml文件不会复制到目标/类 对于第二个案例,我发现了以下内容: 但对于第一个案例,我找不到任何文件。 有人能给我解释一下吗 谢谢 如果右键单击eclipse中的项目并选择“属性”,那么Java构建路径将在底部看到默认构建路径的输入,该路径应为target/classes。源文件夹显示在主对

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

src/java/main/com/xx/zz.xml
1.使用eclise自动生成时,xml文件会复制到目标/类

2.使用“mvn complie”时,xml文件不会复制到目标/类

对于第二个案例,我发现了以下内容:

但对于第一个案例,我找不到任何文件。 有人能给我解释一下吗


谢谢

如果右键单击eclipse中的项目并选择“属性”,那么Java构建路径将在底部看到默认构建路径的输入,该路径应为target/classes。源文件夹显示在主对话框中。如果单击源文件夹,则可以修改每个文件夹,以排除xml文件(如果您希望这样做)


如果您将xml文件放在src/main/resources中,Maven将自动包含它们。

如果您不想在构建目录中包含xml文件,则需要配置eclipse排除的源文件类型-
在项目资源管理器中右键单击该文件,选择“资源配置”>“从生成中排除”,然后选择所需的配置

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不会接触资源。

事实上,在src/main/resources/下有非Java资源文件是maven的惯例。将XML文件移到那里。Java应该在src/main/Java/下。