轻松入门Maven

Maven:一个自动化构建工具

Maven官网: http://maven.apache.org/

Maven['meiven]的本意是专家的意思,是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

1.目前的技术

轻松入门Maven

2.目前技术在开发中存在的问题

  1. 一个项目就是一个工程
  2. 项目中所需要的jar包必须手动"复制"、"粘贴"到WEB-INF/lib目录下
  3. jar包需要别人替我们准备好,或到官网下载
  4. 一个jar包依赖的其他jar包需要自己手动加入到项目中

3.Maven是什么?

Maven是一款服务于java平台的自动化构建工具(Make->Ant->Maven->Gradle)

4.构建过程的各个环节

轻松入门Maven

5.配置maven

  1. 将apache-maven-3.5.3-bin.zip解压到不含有空格或中文的路径下
  2. 配置MAVEN_HOME/M2_HOME系统变量(H:\MyJavaEE\Maven\apache-maven-3.5.3)
  3. 将MAVEN_HOME的bin目录路径添加到Path路径下(%MAVEN_HOME%\bin)
  4. 在cmd测试是否安装Maven成功(mvn -v)

6.maven的仓库跟本地仓库的配置

轻松入门Maven

从apache-maven-3.5.3\conf\settings.xml文件可以知道默认的本地仓库是

Default: ${user.home}/.m2/repository

如果想配置本地仓库,可以在settings标签里添加

<localRepository>D:/.m2/repository</localRepository>

7.maven查找jar的顺序

  1. 优先查找本地
  2. 若本地找不到,则从私服上查找找到后下载到本地仓库
  3. 私服上找不到,则从中央仓库查找,找到后下载到私服,最后下载到本地仓库

最终,maven都会把jar下载到本地仓库,maven工程再引用本地仓库的jar包。

8.修改镜像

apache-maven-3.5.3\conf\settings.xml

<mirrors>
 <mirror>
 <id>alimaven</id>
 <mirrorOf>central</mirrorOf> 
 <name>aliyun maven</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
 </mirror>
</mirrors>

9.第一个maven工程

9.1 目录结构

HelloMaven----------------------------------工程名
---src--------------------------------------源码
---|---main---------------------------------存放主目录
---|---|---java-----------------------------存放java源文件
---|---|---resource-------------------------存放框架或其他工具的配置文件
---|---test---------------------------------存放测试程序
---|---|---java-----------------------------存放java测试源文件
---|---|---resource-------------------------存放框架或其他工具的配置文件
---pom.xml----------------------------------Maven工程的核心配置文件(Project Object Model)

9.2 为什么要遵循约定?

约定>配置>编码

10.maven命令

执行与构建过程相关的maven命令时,必须进入pom.xml所在的目录

轻松入门Maven

11.坐标

通过三个向量在仓库中唯一定位一个Maven工程

轻松入门Maven

12.依赖

Maven解析依赖信息时会到本地仓库中查找被依赖的jar包,对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。

12.1 依赖的范围

轻松入门Maven

轻松入门Maven

轻松入门Maven

12.2 依赖的传递性

依赖有直接依赖和间接依赖两种,这样设计的好处就是可以传递的依赖不必在每个模块工程中都重复声明,但是非compile范围的依赖不能传递

12.3 依赖的排除

<exclusions>
 <exclusion>
 <groupId></groupId>
 <artifactId><artifactId>
 </exclusion> 
</exclusions>

12.4 依赖的原则

解决模块工程之间jar包冲突问题

  1. 路径最短者优先;
  2. 相同路径下,先声明者优先;

13.生命周期

项目构建是指一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。maven对项目构建过程分为三套相对独立的生命周期。每一个阶段都有一个对应的命令,且有相应的插件来支持命令的运行。

轻松入门Maven

注:属于同一个指令周期内的指令,当后面的命令执行时,前面的命令会自动执行。

14.Eclipse配置Maven

  1. Window->Preferences->Maven->Installations->Add->Apply
  2. Maven->User Settings->Browse(settings.xml)->Apply
  3. Window->Show View->Others->Maven Repositories

15.在eclipse执行maven命令时报错

报错信息:-Dmaven.multiModuleProjectDirectory system property is not set.

解决方法:

轻松入门Maven

16.在eclipse新建动态web工程的配置

新建的动态的web工程并没有自动为我们生成WEB-INF/lib及web.xml

  1. 在新建的动态web工程上右键选择Preferences
  2. 选择Project Facets
  3. 将Dynamic Web Module勾去掉
  4. 点击右下角的apply
  5. 再次勾选Dynamic Web Module,会出现Further configuration available...
  6. 点击Further configuration available...
  7. 修改Content directory:src/main/webapp
  8. 勾选Generate web.xml deployment descriptor
  9. 点击OK即可

17.统一管理依赖的版本号

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

<properties>
	<hoki.spring.version>4.2.4.RELEASE</hoki.spring.version>
</properties>

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

<version>${hoki.spring.version}</version>

当然,properties标签内还可以有其他的用途,凡是需要统一声明后再引用的场合都可以使用。

<properties>
	<hoki.spring.version>4.2.4.RELEASE</hoki.spring.version>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

18.继承

  • 需求: 统一管理各个模块工程中对junit依赖的版本
  • 解决思路: 将junit依赖统一提取到"父"工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。

操作步骤:

1.创建一个maven工程作为父工程,打包的方式为pom

<groupId>com.hoki.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

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

<!-- 子工程中声明父工程 -->
<parent>
	<groupId>com.hoki.maven</groupId>
	<artifactId>Parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
	<relativePath>../Parent/pom.xml</relativePath>
</parent>

3.将子工程的坐标中与父工程坐标中重复的内容删除

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

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
		</dependency>
	</dependencies>
</dependencyManagement>

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

注意: 做了继承的项目,在安装的时候,要注意安装顺序。

19.聚合

  • 作用: 一键安装maven工程
  • 配置方式: 在一个总的聚合工程中配置各个参与聚合的模块
<!-- 配置聚合 -->
<modules>
	<!-- 指定各个子工程的相对路径,顺序可以无序-->
	<module>../mvn_web</module>
</modules>
  • 使用方式: 在聚合工程的pom.xml上点右键→run as→maven install

20.mvnrepository

用于搜索需要的jar包的依赖信息

mvnrepository.com: http://mvnrepository.com/