Maven

Maven

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具, 专注服务于 Java 平台的项目构建和依赖管理

为什么使用Maven

本次写作是在学习SSM框架之后。
即使不使用 Maven 我们仍然可以正常进行 B/S 结构项目的开发。从表述层、业务逻辑层到持久化层再到数据库都有成熟的解决方案,那maven的作用在哪里那?

Maven的用处

  • 第三方包的管理
使用第三方包时的方法是 下载第三方jar包,再添加到运行时环境
此方式存在一些问题,首先是第三方jar包的获取,不够  规范、完整、准确
而maven调用第三方包以坐标的方式唯一定位

其次对于工作区中不同的工程即使调用相同的jar包,也需要重复的天骄到lib中,使得工作区存在大量的冗余
maven只需要在中心仓库中储存一份即可,节约空间避免混乱。
  • 解决jar包的依赖关系
jar包并非孤立存在的,往往需要在其他 jar 包的支持下才能够正常工作,称之为 jar 包之间的依赖关系。
传统的导包方式需要将所有所依赖的包导入,才能正常运行。
最典型的例子是: commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar
如果没有 IO 包, FileUpload 包就不能正常工作。

而Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来。
  • 便于项目的拆解

Maven的自动化构建

构建的主要过程

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

Maven 的意义就体现出来了, 自动的从构建过程的起点一直执行到终点:
构建过程

常用命令

mvn -v:查询Maven版本

mvn -compile:编译

mvn -test:测试项目

mvn -package:打包

mvn -clean:删除target文件夹

mvn -install:安装

Maven的核心概念

  1. 约定目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 生命周期
  6. 仓库
  7. 继承
  8. 聚合
  9. 插件

约定目录结构

开发中让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:

  • 通过配置的形式明确告诉它
  • 基于第三方工具或框架的约定

Maven采用后者,约定 > 配置 > 编码。只有以约定目录结构进行编码Maven才能找到源文件,进而实现自动化构建
Maven的约定目录结构

POM

Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。Maven 工程的核心配置,Mave对其解析。类似于DOM。
POM详细配置说明

坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。

  • groupid:公司或组织的域名倒序+当前项目名称
  • artifactId:当前项目的模块名称
  • version:当前模块的版本
<dependency>
	<groupId>com.wang.maven</groupId>
	<artifactId>Hello</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
</dependency>

磁盘 定位方式

com/wang/maven/Hello/0.0.1-SNAPSHOT/artifactId-version
即
com/wang/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

依赖

依赖范围
 1. compile :默认范围,用于编译      
 2. provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath      
 3. runtime: 在执行时需要使用      
 4. test:    用于test任务时使用      
 5. system: 需要外在提供相应的元素。通过systemPath来取得      
 6. systemPath: 仅用于范围为system。提供相应的路径      
 7. optional:   当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用

常用范围:compile、 test、 provided
在这里插入图片描述

依赖传递

compile的依赖可传递。

依赖冲突

若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

1.短路优先

本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar
若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。

Maven只会引用引用路径最短的Jar。

2.声明优先

若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。
依赖排除

需求:依赖中存在快照版本,不稳定,需要排除。

<dependency>
	<groupId>com.atguigu.maven</groupId>
	<artifactId>HelloFriend</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<type>jar</type>
	<scope>compile</scope>
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

也可使用统一声明版本方式解决。

<properties>
	<wang.spring.version>4.1.1.RELEASE</atguigu.spring.version>
</properties>

<dependencies>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${wang.spring.version}</version>“玩转” Java 系列
</dependency>
……
</dependencies>

待续…

参考:
Maven -菜鸟教程
超级详细的Maven使用教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值