pom.xml 项目对象模型

每一个项目都有一个pom.xml,Project Object Model,项目对象模型。
用面向对象的思维还看这个文件,它就是一个项目。
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

所有的pom.xml都要配置三个最基本的东西,其它的不配都没关系。下面的配置只需要知道即可,因为工具会自动生成。

示例:

1
2
3
4
5
6
7
<!-- 固定的头部信息,不要去改变 -->
<modelVersion>4.0.0</modelVersion>

<!-- 项目座标 -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>

说明:

  1. modelVersion: 永远的4.0.0,这个固定存在的。
  2. groupId: 项目的项目组,就是把域名反转,一样的。如:com.test.study
  3. artifactId: 项目中的哪一个模块。一般用"项目名-模块名"。如:study-frist
  4. version: 快照版本一般是1.0-SNAPSHOT,或SNAPSHOT-0.0.1

groupId、artifactId、version 还有一个作用,就是可以被其他的项目引用时,当作引用部头。这就是模块化的管项目管理理念。

项目座标

什么是项目座标

项目座标,是为了让别人maven项目在引用当前项目时可以定位到的信息。这就是项目座标的意义。
两个项目之前之所以可以互相调用就是因为项目座标起了作用,maven通过识别项目座标来识别项目中的信息包括版本,包路径之类的信息。
注意,不要陷入理解的误区,maven是项目和管理的工具,但他不是项目的一部分。maven通过pom.xml识别项目信息从而帮助项目进行添加、打包、引用等操作,但不代表java项目代码本身会被maven影响,只是项目的构建形式不同了而已。项目是项目、代码是代码,不要混为一谈。maven做的是项目构造方面的操作,而不是代码的操作,仔细分析maven的功能,没有一个是对会代码产生影响的,maven的操作都是对项目构建产生影响。

项目座标命名规则

1.GroupID是分组ID,以包名方式命名,实际上就是命名空间的作用。惯例以部门命名。

com.company.department
com.test.cash
com.test.deployment

2.ArtifactID就是项目的唯一的标识符,也就是模块名称。实际对应项目的名称,

admin //view层
bussiness //service、dao
commont //公共代码库

问题:不同的项目之前的部门名称可以相同,只是ArtifactID 不同可以吗?
答案是的,以模块的思想去看待。不同的项目只是不同的模块,把每一个不同的项目看成是不同功能的模块但是他们是同属于一个项目下的,所以可以以同一个GroupID命名。

3.引用项目座标

A项目的pom.xml中项目座标

1
2
3
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>

B项目引用A项目座标

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<!-- A项目的项目座标 -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

作用:B项目即可引用A项目中的类了进行使用了。

完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<!-- 固定的头部信息,不要去改变 -->
<modelVersion>4.0.0</modelVersion>

<!-- 项目座标 -->
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>


<packaging>jar</packaging> //打包格式

<name>my-app</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--插件信息,配完以后,maven会自动去下载。-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>