[TOC]

1.常用maven命令

①注意: 执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。

与构建过程相关: 编译、测试、打包、…

②常用命令

1
2
3
4
5
mvn clean              //清理
mvn compile //编译主程序
mvn test-compole //编译测试程序
mvn test //执行测试
mvn package //打包
1
2
mvn install     //自己开发的Maven工程,用install安装进仓库
mvn site //生成站点

2.关于联网问题

①Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。

②当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。

③本地仓库的默认位置: [系统中当前用户的家目录]\.m2\repository

C:\Users\[系统中当前用户的家目录]\.m2\repository

④Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。(可设置aliyun镜像加速)

在 maven-3.X…/conf/setting.xml中的<mirrors></mirrors>中,添加以下代码:

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
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<!-- 中央仓库在中国的镜像 -->
<mirror>
<id>maven.net.cn</id>
<name>oneof the central mirrors in china</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

⑤如果此时无法连接外网,则构建失败

⑥修改迷人本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件

[1]找到Maven解压目录\conf\setting.xml

[2]在setting.xml文件中找到LocalRepository标签

[3]将<localRepository>/path/to/local/repo</localRepository>从注释中取出

[4]将标签体内容修改为已经准备好的Maven仓库目录

<localRepository>D:\DevInstall\RepMaven</localRepository>

3.POM

①含义: Project Object Model 项目对象模型

DOM Document Object Model 文档对象模型

②pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都是在这个文件中进行配置。

重要程度相当于web.xml对于动态Web工程

4.坐标

①数学中的坐标:

[1]在平面上,使用X、Y两个向量可以唯一的定位平面中的任何一个点

[2]在空间中,使用X、Y、Z三个向量可以唯一的定位空间中的任何一个点’

②Maven的坐标(GAV):

使用下面三个向量在仓库中唯一定位一个Maven工程

[1]groupid: 公司或组织域名倒序+项目名

<groupId>com.ngp.maven</groupId>

[2]artifactid: 模块名

<artifactId>Hello</artifactId>

[3]version: 版本

<version>0.0.1-SNAPSHOT</version>

③Maven工程的坐标与仓库中路径的对应关系

1
2
3
4
5
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>

org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

5.仓库

①仓库的分类

[1]本地仓库: 当前电脑行部署的仓库目录,为当前电脑上所有的Maven工程服务

[2]远程仓库:

(1)私服: 搭建在局域网环境中,为局域网范围内的所有Maven工程服务

(2)中央仓库: 假设在Internet上,为全世界所有Maven工程服务

(3)中央仓库镜像: 为了分担中央仓库的流量,提升用户访问速度

②仓库中的保存的内容: Maven工程

[1]Maven自身所需要的插件

[2]第三方框架或工具的jar包

[3]我们自己开发的Maven工程

6.依赖[初步]

①Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。

对于我们自己开发的Maven工程,使用install命令安装后就可以进入仓库。

②依赖的范围

[1]compile范围依赖

  • 对主程序是否有效: 有效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 参与
  • 是否参与部署: 参与
  • 典型例子: spring-core

[2]test范围依赖

  • 对主程序是否有效: 无效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 不参与
  • 是否参与部署: 不参与
  • 典型例子: junit

[3]provided范围依赖(通常在web里面)

  • 对主程序是否有效: 有效
  • 对测试程序是否有效: 有效
  • 是否参与打包: 不参与
  • 是否参与部署: 不参与
  • 典型例子: servelet-api.jar

1

2

3

— 26节 ----

7.依赖[高级]

①依赖的传递性

4

[1]好处: 可以传递的依赖不必在每个模块工程中都重复声明,在 “最下面” 的工程中依赖一次即可。

[2]注意: 非compiled范围的依赖不能传递。(在这指的就是test、provided)所以在各个工程模块中,如果有需要就得重复声明依赖。

②依赖的排除

[1]需要设置依赖排除的场合

5

[2]依赖排除的设置方式

1
2
3
4
5
6
7
> <dependencies>
> <dependency>
> <groupId>commons-logging</groupId>
> <artifactId>commons-logging</artifactId>
> </dependency>
> </dependencies>
>

③依赖的原则

[1]作用: 解决模块工程质检的jar包冲突问题

[2]情景设定1: 验证路径最短者优先原则

6

[3]情景设定2: 验证路径相同时先声明者优先

7

先声明指的是dependency标签的声明顺序

④统一管理依赖版本

[1]情景举例

8

这里对Spring各个jar包的依赖版本都是4.0.0

如果需要同一升级为4.1.1,怎么办? 手动逐一修改不可靠。

[2]建议配置方式

i. 使用properties标签内使用自定义标签统一声明版本号

1
2
3
4
> > <properties>
> > <ngp.spring.version>4.0.0.RELEASE</ngp.spring.version>
> > </properties>
> >

ii.在需要同一版本的位置,使用${自定义标签名}引用声明的版本号

1
2
> > <version>${ngp.spring.version}</version>
> >

[3]其实properties标签配合自定义标签声明数据的配置并不是只能用于声明依赖的版本号。(还可以配置UTF-8等)凡事需要统一声明后在引用的场合都可以使用。

1
2
3
4
5
> <properties>
> <ngp.spring.version>4.0.0.RELEASE</ngp.spring.version>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> </properties>
>

8.继承

①现状

Hello依赖的junit: 4.0

HelloFriend依赖的junit: 4.0

MakeFriends依赖的junit: 4.9

由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致

②需求: 同一管理各个模块工程中对junit依赖的版本

③解决思路: 将junit依赖统一提取到 “父” 工程中,在子工程中声明junit依赖时不指定版本,以父工程中同一设定的为准。同时也便于修改。

④操作步骤

[1]创建一个Maven工程作为父工程。注意: 打包的方式pom

[2]在子工程中声明对父工程的引用

1
2
3
4
5
6
7
8
9
10
> <!-- 子工程中声明对父工程的引用 -->
> <parent>
> <groupId>com.ngp.maven</groupId>
> <artifactId>Parent</artifactId>
> <verison>0.0.1-SNAPSHOT</verison>
>
> <!-- 以当前文件为基准的父工程pom.xml文件的相对路劲 -->
> <relativePath>../Parent/pom.xml</relativePath>
> </parent>
>

[3]将子工程的坐标中与父工程左边中重复的内容删除

9

[4]在父工程中统一junit的依赖

1
2
3
4
5
6
7
8
9
10
11
> <dependencyManagement>
> <dependencies>
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> <version>4.0</version>
> <scope>test</scope>
> </dependency>
> </dependencies>
> </dependencyManagement>
>

[5]在子工程中删除junit依赖的版本号部分

10

⑤注意: 配置继承后,执行安装命令时要先安装父工程。

9.聚合

①作用: 一键安装各个模块工程

②配置方式: 在一个 “总的聚合工程” 中配置各个参与聚合的模块

1
2
3
4
5
6
7
<!-- 配置聚合 -->
<modules>
<!-- 指定各个子工程的相对路径 -->
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>

③使用方式: 在聚合工程的pom.xml上点右键 → run as → maven install

从26节起,运行index.jsp的时候就运行不下去了、、没有 choose a … apache6.0的选项。。。之后的都是纯笔记,没有实操