Maven总结之约定大于配置(六)

阿凡达2018-06-28 17:31

6. Maven之约定大于配置

Maven默认约定了一套目录结构,在通过Maven创建了项目以后,项目的目录结构就是以这套目录结构作为模板创建的,看官方文档解释:

Having a common directory layout would allow for users familiar with one Maven project to immediately feel at home in another Maven project. The advantages are analogous to adopting a site-wide look-and-feel.

6.1 目录结构标准

  • 通用的目录结构

${basedir}
|-- pom.xml
|-- src
|   |-- main
|   |   `-- java
|   |   `-- resources
|   |   `-- filters
|   `-- test
|   |   `-- java
|   |   `-- resources
|   |   `-- filters
|   `-- it
|   `-- assembly
|   `-- site
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt
  • 目录结构解释

| 目录 |英文描述 |中文解释|
|---|---|--------|
|basedir/src/main/java|Application/Librarysources|||{basedir}/src/main/resources| Application/Library resources|项目的资源文件所在的目录| |basedir/src/main/filters|Resourcefilterfiles|||{basedir}/src/main/webapp Web| application sources|如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下| |basedir/src/test/java|Testsources|||{basedir}/src/test/resources| Test resources|测试相关的资源文件所在的目录| |basedir/src/test/filters|Testresourcefilterfiles|||{basedir}/src/it| Integration Tests (primarily for plugins)|集成测试代码所在的目录,主要是供别的插件使用的。| |basedir/src/assembly|Assemblydescriptors|Assembly||{basedir}/src/site |Site|站点文件| |basedir/LICENSE.txt|Projectslicense|||{basedir}/NOTICE.txt |Notices and attributions required by libraries that the project depends on|该项目依赖的库的注意事项| |basedir/README.txt|Projectsreadme|readme||{basedir}/pom.xml| Project's pom.xml|项目的描述文件|

  • 进一步解释

在一个Maven项目中,在项目根目录下,除了包含了上面约定的目录结构中的部分目录外,还包含了项目描述文件,pom.xml文件。

在根目录下,主要有两个目录,分别是src和target目录,除此之外,还会有一些版本控制系统的元数据文件,包括git的.gitignore或者svn的.svn。如果一个项目是由多个子项目组成的,那么在该项目的根目录下,还会包含它的子项目的目录。子项目的目录布局,默认也是和上面列出的目录结构一致的。

我们在上一篇文章中以及提及了target目录,这个目录只要用于存放项目构建的输出文件,比如class文件以及打包后的包文件等

在src目录下,包含了项目所有的源代码和资源文件,以及其他项目相关的文件。在该目录的main目录下,包含了构建该项目的artifact(可以理解为时项目的程序部分)所需的代码和资源,而test目录包含了测试相关的代码和资源文件。

在目录main和test下的子目录结构,是非常相似的,都包含了两个子目录:java子目录和resources子目录,这两个目录分别放了源代码和资源文件。不同的是,在main目录下的这两个目录中放置了项目主程序的代码,而在test目录下,放置的是测试相关的代码和资源文件。其中java目录是代码的根目录,在该目录下的子目录,就是Java的包名对应的目录结构了。

想了解更多详情,请参考官方文档:

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

6.2 版本规范

Maven下载相关到依赖存放到本地仓库的路径

${user.homedir}/.m2/repository/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>

上面标识了一个jar包,上面version里面会定义依赖包的版本,一把会用SNAPSHOT,LATEST,RELEASE。

  • SNAPSHOT
    如果一个版本包含字符串"SNAPSHOT",Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC时间。例如,"1.0-SNAPSHOT"会在2010年5月5日下午2点10分发布时候变成1.0-20100505-141000-1。 这个词只能用于开发过程中,因为一般来说,项目组都会频繁发布一些版本,最后实际发布的时候,会在这些snapshot版本中寻找一个稳定的,用于正式发 布,比如1.4版本发布之前,就会有一系列的1.4-SNAPSHOT,而实际发布的1.4,也是从中拿出来的一个稳定版。

  • LATEST 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。

  • RELEASE 指最后一个发布版。

Maven总结之入门指南(一)

Maven总结之生命周期(二)

Maven总结之插件管理(三)

Maven总结之Setting.xml配置文件解析(四)

Maven总结之Pom.xml解析(五)

Maven总结之命令(七)

Maven总结之仓库(八)

Maven总结之依赖管理(九)

本文来自网易实践者社区,经作者王志泳授权发布。