Maven学习
Maven学习
Maven的概念
Maven是Apache下的一个开源项目,主要使用java语言实现,它用于对java项目进行项目构建和依赖管理以及项目信息管理。
Maven是基于项目对象模型(Project object model),俗称POM。简单来说,maven就是项目依赖管理工具,将项目中的使用的依赖进行统一管理。通过pom.xml文件来进行配置,自动获取项目jar包,解决依赖冲突问题。
Maven的作用
项目构建
项目构建,是指一个项目清理、编译、测试、报告、打包、安装、部署等过程,Maven中把这些过程进行标准化管理,可以通过一个命令,自动按照顺序依次执行每一个步骤。
- clean:将之前编译得到的旧class文件字节码文件删除
- compile:将java源程序编译成class字节码文件
- test:自动测试,调用junit程序
- report:测试程序执行结果
- package:动态web工程打成war包,java工程打jar包
- install:将打包文件复制到maven仓库指定位置
- deploy:将工程生成结果放到服务器或者容器
依赖管理
maven将项目中所依赖的外部jar包进行统一管理。
主要解决了不同官网下载不同的jar包,自测jar包冲突问题,jar依赖关系分析等等。
dependency特性
➢ 依赖调解
第一原则:路径最短者优先,A -> B -> C ->X(1.0), A -> D -> X(2.0),此时A只会依赖X(2.0)
第二原则:第一声明者优先,当第一原则无法解决依赖冲突时,则按在pom中依赖声明的顺序决定
依赖管理关键标签
dependencyManagement
-
节点中定义依赖信息,在后续引入依赖时不用重复定义version、scope等
-
节点中定义的依赖无法直接生效,只是作为管理使用
-
在具体artifact中需要引用依赖的时候有两种方式实现
○ 1. 在节点中列出依赖
○ 2. 在父pom的节点中列出依赖
dependencies
-
节点中定义的依赖在编译时build,自动会引入此包到路径下
-
除非在dependencyManagement中有定义版本,否则版本不能为空
-
在具体artifact中需要引用依赖的时候有两种方式实现
○ 1. 在节点中列出依赖
○ 2. 在父pom的节点中列出依赖
两者的区别
Management作为管理,只是将项目所需要的依赖进行列举,最终使用需要dependencies标签中定义。
dependencyManagement与dependencies 标签并列使用。
<properties>
<mybatis.version>1.3.0</mybatis.version>
<spring.version>2.4.5</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
上述pom.xml中出现标签解释:
属性定义:主要对依赖版本统一定义管理
使用时用${属性名称},如${spring.version}
依赖坐标的标签定义:
一个Java构件的五大坐标元素
➢ groupId:组Id
➢ artifactId: 项目的Id
➢ version: 版本
➢ package: 包类型
➢ classifier: 分类,如二进制包,源、文档等
其余标签
默认是compile, compile编译、测试、运行都有效, 如果是war包在生成的lib中会将这个依赖打进行 provided是容器提供,war包中的lib下不会打进行 test是测试使用,runtime、system
classifier分类定义类别,这个需要配合依赖提供方提供的分类使用
两个标签配合使用,去除jar包中所依赖的包
去除jar包中所依赖的所有其他包,只留自己
dependency依赖检查
通过命令解析jar包中的所有依赖关系
⚫ mvn dependency:analyze
⚫ mvn dependency:tree
⚫ mvn dependency:list
Maven项目的目录约定
MavenProjectRoot(项目根目录 必须)
|----src
| |----main
| | |----java ——存放项目的.java文件 (必须)
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件 (必须)
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类 (可选)
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件(可选)
|----target ——项目输出位置
|----pom.xml ----用于标识该项目是一个Maven项目(必须)
maven的安装
- 安装Maven,安装命令如下:
sudo apt-get install maven
2.测试Maven是否安装成功,查看Maven版本命令:
mvn --version
3.修改配置文件setting.xml
搜索阿里源镜像,在公司根据不同的仓库进行设置
maven演示
- 新建maven项目
- 测试
mvn test
- 清理 清除构建生成的target文件夹
mvn clean
- 打包 将项目打包为war或者jar包
mvn package # 只是打包,jar包从本地仓库寻找
mvn install # 打包,并下载到本地仓库
- 编译 将项目编译为class文件,生成classes文件夹
mvn compile
maven插件
插件的生命周期
Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。
三套生命周期
Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。
1、clean生命周期
pre-clean :执行清理前的工作;
clean :清理上一次构建生成的所有文件;
post-clean :执行清理后的工作
2、default生命周期
default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。
- validate
- initialize
- generate-sources
- process-sources
- generate-resources
- process-resources :复制和处理资源文件到target目录,准备打包;
- compile :编译项目的源代码;
- process-classes
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources
- test-compile :编译测试源代码;
- process-test-classes
- test :运行测试代码;
- prepare-package
- package :打包成jar或者war或者其他格式的分发包;
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install :将打好的包安装到本地仓库,供其他项目使用;
- deploy :将打好的包安装到远程仓库,供其他项目使用;
3、site生命周期
- pre-site
- site :生成项目的站点文档;
- post-site
- site-deploy :发布生成的站点文档
posted on 2022-07-07 09:16 Chase_Hanky 阅读(135) 评论(0) 编辑 收藏 举报