Maven常用的构建命令


mvn -v 查看maven版本
  compile 编译
  test 测试
  package 打包
  clean 删除target
  install 安装jar包到本地仓库

Maven自动建立目录骨架


创建目录的两种方式:
archetype:generate 按照提示进行选择
archetype:generate -DgroupId=组织名,公司网址的反写+项目名
         -DartifactId=项目名+模块名
         -Dversion=版本号
         -Dpackage=代码所存在的包

Maven中坐标和仓库的概念


构建:
在maven世界中任何一个依赖、插件、项目构建的输出都可以被称为构建。

坐标:
所有构建通过坐标作为其唯一标识。就好像我们的工作单位或家庭地址。

仓库:
用来管理项目的依赖,分为本地仓库和远程仓库。默认地址在maven\lib\maven-model-builder.jar解压打开后里面org\apache\maven\model\pom-4.0.0.xml。这是maven提供的超级pom,所有的maven项目都会继承这个pom。打开这个文件后<repository>标签内<url>标签就是默认的全球的中央仓库的地址,可以用浏览器打开,在里面可找到大部分的开源的java项目。

镜像仓库
修改镜像仓库的位置:打开maven\conf\settings.xml 找到根据示例修改,下面是一个国内镜像仓库的demo

1
2
3
4
5
6
<mirror>
<id>maven.net.cn</id>
<mirrorOf>central</mirrorOf> *
<name>central mirror in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>

更改仓库的位置
默认仓库位置路径:C:\Users\username.m2\repository
修改时还是打开maven\conf\settings.xml,找到<localRepository>

Maven的生命周期和插件


完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署
clean、compile、test、package、install

maven生命周期
clean 清理项目

  • pre-clean 执行清理前的工作
  • clean清理上一次构建生成的所有文件
  • post-clean执行清理后的文件

default 构建项目(最核心)

  • compile test package install

site 生成项目站点

  • pre-site 在生成项目站点前要完成的工作
  • site 生成项目的站点文档
  • post-site 在生成项目站点后要完成的工作
  • site-deploy 发布生成的站点到服务器上

三块生命周期彼此独立

Maven依赖范围


maven中提供了三种classpath:
1、编译
2、测试
3、运行
<scope>test</scope>设置为test时则只存在于测试范围中,依赖范围就是用来控制和三种classpath的关系

scope具体属性:(可参考maven.apache.org官网guide)
compile:默认的范围,编译、测试、运行都有效
provide:在编译和测试时有效
runtime:在测试和运行时有效
test:只在测试时有效
system:与本机系统相关联,可移植性差
import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置

Maven依赖传递


Maven的依赖<dependency>默认会向下集成,如果构建想去除依赖可以使用<exclusion>标签。

补充小知识:
maven默认采用jdk1.5,那如何采用1.8的版本?
需要要修改settings.xml中找到<profile>将其中改为对应版本即可

Maven依赖冲突


1、短路优先

A->B->C->X(jar)
A->D->X(jar)
优先解析路径短的版本

2、先声明先优先
如果路径长度相同,则谁先声明,先解析谁

聚合和继承

聚合
<modules>标签,将需要聚合的类加入<module>

继承
父POM中将dependencies中的放入dependencyManagement,并在properties中声明版本号等属性信息。
子POM中加入父POM的坐标,在依赖中写入基本的坐标名即可。

附录 Maven pom.xml文件解析


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<!-- 指定了当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--
第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
0.0.1
snapshot 表示快照版本
alpha 表示内部版本
beta 表示公测版本
Release 表示稳定版本
GA 表示正式发布版本
-->
<version>当前项目的版本号</version>
<!-- 默认是jar
war zip pom -->
<packaging></packaging>
<!-- 项目描述名,产生项目文档时才会使用 -->
<name></name>
<!-- 项目的地址 -->
<url></url>
<!-- 项目描述 -->
<description></description>
<!-- 开发人员信息 -->
<developers></developers>
<!-- 项目授权信息 -->
<licenses></licenses>
<!-- 项目组织信息 -->
<organization></organization>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!-- 依赖范围 -->
<scope></scope>
<!-- 设置依赖是否可选,只有ture和false,默认为false -->
<optional></optional>
<!-- 排除依赖传递的列表 -->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 通常对构建的行为提供插件的支持 -->
<build>
<!-- 插件列表 -->
<plugins>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugins>
</build>
<!-- 子模块对父模块的集成 -->
<parent></parent>
<!-- 聚合运行多个modules项 -->
<modules>
<module></module>
</modules>
</project>

本文地址: http://despot-zaza.github.io/2017/05/09/Maven学习笔记/