什么是POM
POM是project object model 项目对象项目模型的简写,它是Maven项目保存的xml格式的文件,是项目所有事情的一站式服务,在Maven的世界里,一个项目不需要任何代码,只需要一个pom.xml文件
快速概述
下面是POM的元素列表,大家可以先熟悉下,注意,modelVersion
的值为4.0.0,这是当前唯一支持的版本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
Maven坐标
何为Maven坐标
Maven坐标类似于平面几何中坐标,它用来唯一 标识构建,这样解决了当需要用到Spring Framework 依赖的时候,大家需要自行去spring官方网站下载,浪费大量时间,因此Maven 就定义了一组规范:世界上任何一个构建都可以使用Maven坐标的唯一标识。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
上述定义的POM是Maven允许最低的要求,就是说 groupId、artifactId、version这三个元素是必须有的(不过,如果他们是从父级继承的,则不需要显示的定义groupId、version,这种情况子类也是有这两个的信息的,只是通过父类得到的)
groupId
:定义当前Maven项目隶属的实际项目,这在组织或项目中是唯一的。例如:所有Maven的核心组件都可以在groupId下;groupId不一定采用xxx.xxx.xx这种形式,也可以是一个单词,如单元测试junit的groupId就是一个单词 junit;当存储在仓库时,groupId就会被分割为目录例如
org.codehaus.mojo
,目录结构为org/codehaus/mojo
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency>
arifactId
:钙元素定义实际项目中的一个Maven项目(模块),推荐使用实际项目名称作为artifactId的前缀,例如servlet的artifactId为servlet-api,这样做的好处是方便寻找<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> </dependency>
version
:该元素定义Maven项目当前所处的版本,例如上文中servlet-api的版本是2.4,Maven定义了一头完整的版本规范,一级快照(SNAPSHOT)的概念,后续做详细介绍
packaging
:钙元素定义Maven项目的打包方式。打包方式通常和最终所生成构建的文件扩展名对应,默认的打包方式jar,当前核心packaging的值有:pom
,jar
,maven-plugin
,ejb
,war
,ear
,rar