文章目录
一、背景
在Maven出现之前,Java 项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在哪里,没有一个权威的规范。而Maven对项目的目录结构、测试用例命名方式等内容都做了规定。使用Maven管理的项目必须满足这些规则。用户在不同项目间切换的时候,免去了额外学习成本,即约定优于配置(Convention Over Configuration)。
二、目录结构和解读
目录 | 解读 |
---|---|
src/main/java | 主代码。编写java源代码的地方。 |
src/main/resources | 主资源。执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中。 |
src/main/filters | 资源过滤文件 |
src/main/webapp | web应用的目录,WEB-INF,js,css等。(类似于动态web项目里的webContent目录。) |
src/main/assembly | 组件的描述配置,如何打包 |
src/test/java | 测试代码。编写测试代码的地方。测试代码只在运行测试时用到,不会被打包。 |
src/test/resources | 测试资源。执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中。 |
src/test/filters | 测试资源过滤库。 |
src/it | Integration Tests (primarily for plugins) |
src/site | 一些文档 |
target | maven的输出目录。存放项目构建后的文件和目录,如jar包、war包、编译的class文件等。是clean、compile等命令操作的目录 |
LICENSE.txt | Project’s license |
NOTICE.txt | Notices and attributions required by libraries that the project depends on |
README.txt | Project’s readme |
在项目的顶层有:src、target、pom.xml文件、文本文档(readme.txt、license.txt、NOTICE.txt等),此外,‘.gitignore’是git的忽略配置文件一般也放在顶层。
这个结构只有两个子目录:src和target。这里唯一需要的其他目录是元数据,如cvs,.git或.svn,以及多项目构建中的任何子项目(每个子项目都将如上所述)。
如果工程的构建还有其他贡献源,那么它们将位于其他子目录下:例如,src/main/antlr将包含antlr语法定义文件。(这句话应该可以解释,为啥项目中有其他目录。)