- Maven概述
1、maven概念
- 概念:
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项
目构建和依赖管理。
- 核心构成:
Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组
标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency
Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)
的逻辑。
2、maven好处
1、jar依赖的引入:之前拷贝jar包的操作,随着项目增多,磁盘里面jar包会增加,这样会占用越来越多磁盘空间。Maven里面我们使用坐标来引入jar依赖。
2、jar依赖的获取:之前下载jar包,我们通常是登录官网去下载。这样的操作比较麻烦。Maven提供了依赖仓库。
3、jar依赖的传递:当前项目引入其他项目的时候,可以将引入项目里面的jar直接使用。
4、项目的模块化管理:maven提供了原型模块化操作。内置一些项目模板,我们使用命令来创建项目结构。
3、构建及自动化构建
1)概念:
构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。(创建项目)
2)构建过程的几个主要环节:
- 清理:删除以前的编译结果,为重新编译做好准备。(清理class文件)
- 编译:将 Java 源程序编译为字节码文件 (java---class)
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
- 报告:在每一次测试后以标准的格式记录和展示测试结果(doc文档)
- 打包:将工程封装为一个压缩文件,Java 工程对应 jar 包,Web 工程对应 war 包
- 安装:将打包的结果jar 包或 war 包安装到本地仓库中。
- 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行
3)Maven把以上的操作整合到一起,实现了机械化的构建,也就是我们说的自动化构建。
4、maven仓库
在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
通俗的理解就是存放jar包的地方。
1、本地仓库:本地磁盘仓库
- 系统默认的:C:\Users\admin\.m2
- 自定义仓库:根据自己的设置
- 远程仓库:
- 中央仓库:服务器在国外,所有的资源都可以找到。访问比较慢
- 镜像仓库:国内的一些企业将中央仓库的资源下载到国内。比较常见的:阿里云、华为云、腾讯云
- 私服仓库:企业内部搭建的局域网服务器
3、本次学习我们使用阿里云镜像仓库:
地址:仓库服务
- Maven下载安装
1、maven下载
进入官网选择相应版本下载即可
- 我们使用3.5.4稳定版本。
点击相应的版本,解压到一个没有中文的目录下,解压后目录结构如下:
2、maven配置环境变量
使用maven的前提需要我们的电脑中jdk的环境变量配置正确。
配置maven的环境变量:
- 配置maven_home
- 配置path变量
3、settings文件配置
Maven的conf目录下的settings.xml文件中配置
1、自定义本地仓库:
2、配置阿里云镜像:
<mirror>
<id>aliyunId</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
3、验证安装:cmd输入命令mvn -v
- Maven常用命令
1、创建项目
使用maven内置原型模板,创建项目的命令:mvn archetype:generate
groupId:组织名,即包名
artifactid:项目名
package:默认同groupId
注意在创建过程中使用项目模板时7表示普通java项目,10表示web项目。
java项目结构:
web项目结构:
2、编译
编译命令:mvn compile
生成taget目录,里面是java文件的编译后的class文件
注意:该命令一定要进入到项目目录下进行编译。
3、清理
清理命令:mvn clean
项目需要重新编译的时候,将原来的编译后的class文件清除掉。即删除taget目录
4、测试
测试命令:mvn test
相当于我们之前的单元测试,默认会执行test目录下面的测试文件
5、打包
打包命令:mvn package
将项目导出成一个jar或者war包。
java项目--jar
web项目--war
6、安装
安装命令:mvn install
将项目打包并且发送一份到本地仓库
说明:安装命令会在本地仓库安装一份包文件,用来提供给其他的项目引用。
- Maven生命周期
1.概念
官网查看:Maven Core – Lifecycles Reference
概念:Maven 生命周期是将构建的环节进行了分组,某几个环节构成了一个生命周期。
特点:当执行某个命令的时候,会从当前周期的的第一个构建环节开始执行,到当前构建环节结束。
2.特点
Maven官网查看maven-lifecycles
Maven 有三套相互独立的生命周期,分别是:
- Clean Lifecycle
在进行真正的构建之前进行一些清理工作。 (清除项目之前编译的class文件)
- Default Lifecycle
构建的核心部分,编译,测试,打包,安装,部署等等。(构建的核心环节)
- Site Lifecycle
生成项目报告,站点,发布站点。
它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。 当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
3.详解
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定 的阶段。比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生 命周期,也有 clean 阶段。
(1)Clean 生命周期 Clean 生命周期一共包含了三个阶段: pre-clean 执行一些需要在 clean 之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在 clean 之后立刻完成的工作
- Site 生命周期 pre-site 执行一些需要在生成站点文档之前完成的工作 site 生成项目的站点文档 post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 site-deploy 将生成的站点文档部署到特定的服务器上 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看
- Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。
五、maven核心概念
1、Maven标准目录结构
2、Pom.xml配置文件
- POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
- 执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
- POM 中可以指定以下配置:
- 项目依赖
- 插件
- 执行目标
- 项目构建 profile
- 项目版本
- 项目开发者列表
- 相关邮件列表信息
<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/xsd/maven-4.0.0.xsd">
<!--模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--公司组织名称-->
<groupId>com.offcn</groupId>
<!--项目名-->
<artifactId>mavendemo01</artifactId>
<!--版本号-->
<version>1.0-SNAPSHOT</version>
<!--项目默认打包方式-->
<packaging>jar</packaging>
<name>mavendemo01</name>
<url>http://maven.apache.org</url>
<!--属性配置信息-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--坐标依赖-->
<dependencies>
<!--配置jar包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
</project> |
3、Maven坐标
几何中坐标:x y z 表示一个元素在空间中的位置
Maven坐标:groupId artifactId version通过这三个参数确定一个唯一的依赖。
- 确定项目在本地仓库的位置
- 确定引入的依赖jar包
项目中引入依赖方式:通过坐标形式引入依赖,也就是我们之前的jar的引入。
<depedency>
<groupId>junit<groupId>
<artifactId>junit<aetifactId>
<version>3.8.1<version>
</depedency>
3、获取依赖的坐标的方式:maven中央仓库获取
六、idea整合Maven
1、idea配置maven
2、idea创建maven项目
1、使用模板创建java项目
2、使用模板创建一个javaweb项目
3、关于每次创建maven项目的时候需要去配置maven的问题
4、不使用模板创建项目
1、Idea创建的maven项目中如果项目是一个java项目,pom文件中省略 <packaging>jar</packaging>。打包的的时候会自动打一个jar包
2、idea的maven项目是一个web项目,pom文件中肯定会有标签<packaging>war</packaging>。打包的时候会创建一个war包
5、idea中使用maven的命令
Idea右侧面板中:
Maven Project >项目名称 >Lifecycle >选择命令双击即可
七、Maven依赖管理
1、依赖传递
- 依赖传递的概念:
在项目A中引入一个jar包,项目B中引入项目A,这个时候项目B就可以直接使用A中引入的依赖,这种就是依赖的传递。
- 依赖传递的原则:
- 引入的位置优先:后面引入的会覆盖前面引入的依赖
- 距离最短的优先级高
- 引入依赖的范围:scope
- 当scope值为compile的时候,可以依赖传递。其他两个值不可以依赖传递。
- provided典型:servlet-api包
- test典型:junit包
2、依赖冲突解决
- 当项目中引入的jar重复的时候,会产生jar冲突问题。
- 解决jar依赖引入冲突的方式:
- 可以删除不需要的
- 可以改变依赖引入的位置顺序
- 使用scope属性设置依赖传递
- 使用依赖的排除,使用<exclusions>标签排除
八、maven项目管理
1、版本统一管理
当项目中引入的依赖比较多的时候,依赖的版本有些是一样的,这个时候可以使用统一版本管理方式。
统一版本管理实现:
- 设置一个版本的自定义标签
- 使用自定义标签
2、maven继承
继承:maven中设置一个父工程,其他的工程可以继承这个工程。子工程就可以直接使用父工程中的依赖。
语法:
- 父工程打包形式需要设置为pom,作用是给子工程提供依赖
在子工程中使用parent节点引入父工程坐标
3、maven聚合
聚合:将多个项目整合到一个项目下,进行统一的编译运行。聚合的前提是存在继承关系。
聚合的实现:
- 创建父工程,使用mudule标签将子工程引入
- 创建子工程,子工程中需要设置继承
聚合的作用:
可以通过编译父工程实现将所有的子工程一起编译。
小结:
继承和聚合工程通常使用在分布式多模块项目开发时候,一般的小项目使用的还是比较少。
4、继承和聚合的关系
① Maven 的聚合特性可以帮助我们把项目的多个模块聚合在一起,使用一条命令进行构 建,即一条命令实现构建多个项目;
Maven 的继承特性可以将各个模块相同的依赖和插件配置提取出来,在简化 POM 的同时还可以促进各个模块配置的一致性。
② 虽然聚合模块和父模块经常合二为一,但是聚合和继承是两个不同的概念,其实是没有 什么关系的。
聚和模块知道它聚合了哪些模块,但是被聚合的模块不知道聚合模块的存在;
继承中父模块不知道子模块的存在,但是子模块都必须知道自己的父模块是谁。
- 改造项目-图书项目
- 创建一个web类型的maven项目,修改目录结构
- 将原图书项目中的c3p0配置文件放到resources文件夹下
- 将原图书项目中的com包整体复制到java目录下
- 配置pom.xml文件,将需要的依赖坐标复制到文件中
<?xml version="1.0" encoding="UTF-8"?> |
5.配置本地tomcat启动运行即可。