我在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?。
但是对于第一种情况,我找不到任何文件。 有人可以帮我解释一下吗?
谢谢!
答案 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不会触及资源。