简述Maven

随着开发的项目越来越庞大,再引入各类框架,项目中所需要的jar包越来越多,所以我们需要项目构建工具Maven来协助我们快速构建一个企业级的项目并帮助我们管理大量的依赖

Maven自动构建项目的流程

  1. 清理:删除以前的编译结果,为重新编译做好准备。
  2. 编译:将 Java 源程序编译为字节码文件。
  3. 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  4. 报告:在每一次测试后以标准的格式记录和展示测试结果。
  5. 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
  6. 安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
  7. 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

Maven中的pom.xml文件:

POM Project Object Model:项目对象模型。该文件中配置了当前项目模块的名称与版本号,指定了项目需要的依赖,也就是jar包,也可以指定需要的插件。pom.xml是Maven项目的核心配置。

pom.xml中的坐标、依赖概念:

坐标由如下三个向量组成,也可称为gav,坐标可确定一个唯一的maven工程。

  1. groupid:公司或组织的域名倒序+当前项目名称
  2. artifactId:当前项目的模块名称
  3. version:当前模块的版本

例如以下,确定的是cn/hp/common/1.0-SNAPSHOT/common.1.0-SNAPSHOT.jar这个maven项目模块打成的jar包:

<groupId>cn.hp</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>

而依赖例如,配置了依赖,Maven会主动去仓库寻找或下载对应jar:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>5.0.8.RELEASE</version>
</dependency>

Maven中的仓库概念

仓库又分为

  1. 本地仓库:为当前本机电脑上的所有 Maven 工程服务,默认为本机家目录下的.m文件夹下的repository文件夹。
  2. 远程仓库:
    私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
    中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
    中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的
    响应用户请求,可以在下载的maven资源中的conf文件夹中的setting.xml中加入阿里云镜像,下载jar更快。

仓库中的文件
3. Maven 的插件
4. 我们自己开发的项目的模块
5. 第三方框架或工具的 jar 包

依赖的范围

依赖的范围有compile、test、provided ,在依赖中使用<scope>来指定,例如:

<dependency>      
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>5.0.8.RELEASE</version>
	<scope>compile</scope>
</dependency> 
  • compile 范围的依赖在maven项目下的main工程与test工程都可以使用,项目打包时依赖会一并打包,例如spring核心包
  • test 范围的依赖只允许test工程使用,项目打包时不参与打包,例如junit包
  • provided 范围的依赖允许main工程与test工程使用,项目打包时不参与打包,例如servlet.api包
compiletestprovided
主程序×
测试程序
参与部署××

依赖的排除

如果一个maven工程中出现同样的依赖,可以选择性排除一个,例如:

<dependency>      
	<groupId>cn.hp</groupId>
	<artifactId>common</artifactId>
	<version>1.0-SNAPSHOT</version>      
	<exclusions>           
		<exclusion>               
			<groupId>commons-logging</groupId>               
			<artifactId>commons-logging</artifactId>           
		</exclusion>      
	</exclusions> 
</dependency>

maven工程统一管理依赖版本号

在pom.xml中使用<propertie>标签来声明版本号,例如:

<properties>      
	<spring.version>5.0.8.RELEASE</spring.version> 
</properties> 

在依赖中使用${spring.version}赋予版本,例如:

<dependency>      
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${spring.version}</version>
	<scope>compile</scope>
</dependency> 

依赖的原则

  1. 就近原则,一个工程可能依赖的jar版本不同,那么选择依赖关系路径与自己最近的jar
  2. 如果路径相同,则按pom.xml中声明依赖的顺序,选择最先声明的

依赖的继承

创建父工程,父工程中定义了大量子工程需要的依赖。在子工程中引用父工程,例如:

<parent>
	<!-- 父工程坐标 --> 
    <groupId>cn.hp</groupId>
	<artifactId>parent</artifactId>
	<version>1.0-SNAPSHOT</version>   
	<relativePath>从当前目录到父项目的 pom.xml 文件的相对路径</relativePath> 
</parent>

父工程中依赖用<dependencyManagement>包起来,只是声明该依赖,不会自动下载对应jar,只有子工程继承了该依赖才会触发下载并引入:

<dependencyManagement>
	<dependencies>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>5.0.8.RELEASE</version>
		<scope>compile</scope>
	</dependencies>
</dependencyManagement>

在子项目中重新指定需要的依赖,可以删除范围和版本号

<dependencies>  
	<dependency>   
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
	</dependency> 
</dependencies> 

聚合

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。 在父工程中使用 modules/module 标签配置聚合,例如:

<modules>
	<module>common</module>
	<module>item</module>
</modules>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值