基本概念

gavp

在 Maven 项目的 pom.xml 文件中,我们会看到 gavp 的配置,即 groupId、artifactId、version、packaging。这些配置是 Maven 项目的基本概念。其中。前三个是必须的,packaging 是可选的。这四个属性主要用于标识项目在 Maven 仓库中的唯一性,有时候,我们也把这四个属性称为 Maven 项目的坐标。

gavp 遵循以下规则:

groupId

项目组织或者公司的唯一标识符,通常是公司的域名倒序,例如:com.example。

artifactId

产品名称或者模块名,例如:search。

version

产品的版本号,格式为 主版本.次版本.修订号,例如:1.0.0。

  • 主版本:当你做了不兼容的 API 修改时,增加主版本号。
  • 次版本:当你做了向下兼容的功能性新增时,增加次版本号(新增类、接口等)。
  • 修订号:当你做了向下兼容的问题修正时,增加修订号(修复 bug)。

packaging

打包类型。

  • jar:Java 项目的默认打包类型。
  • war:Web 项目的打包类型。
  • pom:不会进行打包,只是作为父项目的配置文件。

项目结构

Maven 项目约定了一种标准的目录结构,我们创建的项目应该尽可能地符合这个结构。但是,如果不能,可以在 pom.xml 中覆盖这些设置。

目录/文件说明
src/main/java源代码目录
src/main/resources资源文件
src/main/filters资源过滤文件
src/main/webappWeb 项目的 Web 应用目录
src/test/java测试代码目录
src/test/resources测试资源文件
src/test/filters测试资源过滤文件
src/it集成测试(主要用于插件)
src/assembly描述如何将项目组装成一个发布包
src/site项目站点的源文件
LICENSE.txt项目的许可证
NOTICE.txt项目所依赖的库所要求的注意事项和属性
README.txt项目的简介
pom.xml项目的配置文件

该结构只有两个子目录:srctarget。这里唯一需要的其他目录是 CVS.git.svn 等元数据,以及多项目构建中的任何子项目(每个子项目都遵循上面提到的目录结构)。src 目录包含了所有的源代码和资源文件,它包含每种类型的子目录:main 用于主要构建的代码和资源,test 用于单元测试代码和资源、站点等。target 目录包含了所有的输出文件。

maintest 目录中,有一个用于 java 语言的目录(在该目录下存在正常的包层次结构,例如 com.example),还有一个用于 resources 的目录(在给定默认资源定义的情况下复制到目标 classpath 的结构)。

看起来的目录结构如下:

${basedir}
|-- src
|	|-- main
|	|	`-- java
|	|	`-- resources
|	|	`-- filters
|	|	`-- webapp
|	|-- test
|	|	`-- java
|	|	`-- resources
|	|	`-- filters
|	|-- it
|	|-- assembly
|	|-- site
|-- pom.xml
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt