Maven
2022/2/19 23:41:59
本文主要是介绍Maven,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 Maven概述
1.1 为什么使用Maven
- 添加第三方jar包。通过坐标引用jar包。
- jar包间的依赖关系。通过Maven管理包之间的依赖。
- 管理jar包之间的冲突。自动处理jar包间的冲突。
- 获取第三方jar包。从中央仓库获取规范的jar包。
- 将项目拆分成多个工程模块。多个module间使用Maven进行管理,多个package(MVC分层等)。
- 实现项目分布式部署。不同的module在不同的服务器上运行。
2 Maven是什么
2.1 自动化构建工具
- 服务于Java平台的项目构建和依赖管理。
2.2 什么是构建
- 编写代码通过Maven的框架,构建一个可部署的项目(jar包)
2.3 构建的重要环节
- 清理(clean)
- 编译(test-compile)
- 测试(test)
- 报告
- 打包(package)
- 安装(install)
- 部署(deploy)
2.4 自动化构建
- 将以上重要环节自动化
2.5 Maven的核心概念
- POM
- 约定的目录结构
- 坐标
- 依赖管理
- 生命周期
- 插件和目标
- 继承
- 聚合
3 如何使用Maven
3.1安装Maven核心程序
- JAVA_HOME环境变量配置
- 将apache-maven-3.5.4-bin.zip解压到非中文无空格目录
- 配置M2_HOME环境变量目录\apache-maven-3.5.4
- 配置Path:%M2_HOME%\bin
- dos中输入mvn -v查看是否安装成功
3.2 第一个Maven工程(Hello)
1 约定的目录结构
Hello src main resources tset main resources pom.xml
2 创建Maven的核心配置文件pom.xml
<?xml version="1.0" ?> <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.atguigu.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>
3 编写主代码
package com.atguigu.maven; public class Hello { public String sayHello(String name){ return "Hello "+name+"!"; } }
4 编写测试程序代码
package com.atguigu.maven; import org.junit.Test; import static junit.framework.Assert.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello("atguigu"); assertEquals("Hello atguigu!",results); } }
5 运行基本的Maven命令(dos窗口)
// 运行前需要进入到pom.xml目录下 mvn compile //编译 mvn clean // 清理 mvn test-compile // 编译测试程序 mvn test // 测试程序 mvn package // 打包 mvn install // 程序jar包放到本地仓库
3.3 Maven联网问题
1 配置本地仓库
- 默认的本地仓库:用户.m2\repository
- 核心配置文件目录:解压目录的conf\settings.xml
- 在settings.xml中添加本地仓库路径
<localRepository>本地仓库路径</localRepository>
2 配置阿里云镜像,不使用中央仓库
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
3.4 IDEA中配置Maven
1 设置安装目录和本地仓库
2 配置Maven自动导入jar包
3 在File - Other Settings - Settings for New Projects设置以上操作
3.5 创建Maven Module
- 先创建Empty Project
- 创建Maven模块
- 配置pom.xml
- 编写主代码
- 编写测试代码
- 运行Maven工程
3.6 Maven打包插件
- 和依赖
并列
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!-- 指定主类 --> <mainClass>xxx.xxx.XXX</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
4 Maven的核心概念
4.1 POM
- Project Object Module项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型
- pom.xml的大致结构
<project...> // 1 工程 <modelVersion>...</modelVersion>// 1.1 版本 <groupId>...</groupId>// 1.2 工程坐标 <artifactId>...</artifactId> <version>...</version> <properties>// 1.3 自定义依赖版本 <xxx.version>...</xxx.version> </properties> <dependencies>// 1.2 依赖 <dependency>//1.2.1 依赖1 <groupId>...</groupId>// 1.2.1.1 依赖坐标 <artifactId>...</artifactId> <version>...</version> <scope>...</scope> //1.2.1.2 依赖范围 </dependency> <exclusions>// 1.2.2 排除 <exclusion>// 1.2.2.1 排除1 <groupId>...</groupId> <artifactId>...</artifactId> </exclusion> </exclusions> </dependencies> <build>//1.3构建部分 <plugins>//1.3.1插件部分 <plugin>...<plugin>// 1.3.1.1插件1 </plugins> </build> <reporting>// 1.4报表部分 </reporting> </project>
4.2 约定的目录结构
- 约定 > 配置 > 编码。有了约定,就可以不进行配置,是自动化构建的前提
4.3 坐标
1 module的坐标
- 写在
标签下的坐标
<project...> ... <groupId>com.atguigu.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> ... </project>
2 依赖的坐标
- 写在
标签下,每个依赖使用 标签中。
<project...> ... <dependencies> <dependency> <groupId>com.atguigu.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> ... </project>
4.4 依赖管理
1 依赖的范围
- 常见的有 compile、test、provided 还有runtime、import、system等
- 写在
标签中
2 依赖的传递性
直接依赖和间接依赖
- A<---B<---C。C直接依赖于B,B直接依赖于A,C间接依赖于A。
好处
- 可以传递的依赖(非compile依赖),不必在每个模块重复声明,最下面的工程依赖一次即可。
注意
- 非compile依赖不能传递。所以各个工程模块中,如果有需要,就要重复声明该依赖。
3 依赖的原则
- 路径段优先
- 配置文件中
声明顺序优先 - 同时需要考虑依赖的范围
4 依赖的排除
- 如果B不想使用A中的某个依赖a,而A中的该依赖a是compile的且无法修改的,则需要使用exclusions来排除该依赖。且被B依赖的C也被排除了。注:
标签声明在 标签下
5 统一管理目标jar包版本
- 如果配置中有同一版本的不同jar包,使用
标签来自定义依赖的版本<xxx.version>版本号</xxx.version>,在每个依赖中,使用${spring.version}来统一修改
<project> <properties> <spring.version>4.0.0.RELEASE</spring.version> </properties> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </project>
4.5 仓库
1 本地仓库
2 远程仓库
- 私服(局域网)
- 中央仓库(Internet上)
- 中央仓库镜像(各大洲,例如阿里云镜像)
3 仓库的内容
- Maven插件
- 自己编写的项目module
- 第三方框架或工具jar包
4.6 生命周期
- Clean LifeCycle:构建前的清理工作
- 三个阶段:pre-clean、clean、post-clean
- Default LifeCycle:构建的核心工作:编译、测试、打包、安装、部署等
- compile编译主程序
- test-comply编译测试程序
- test进行测试
- package打包
- install安装到本地仓库
- Site LifeCycle:生成项目报告,站点,发布站点
- pre-site、site、post-site、site-depoly
- pre-site、site、post-site、site-depoly
4.7 插件和目标(plugin and target)
- Maven的核心,每个生命周期的每个步骤都是由插件完成的
- 每个插件有多个功能,每个功能完成一个步骤
- compile是maven-compiler-plugin的一个功能,pre-clean是maven-clean-plugin的一个目标
5 继承
- 说明:
- test范围依赖(例如junit)不能传递,各个工程都有一样的该依赖,容易造成版本不一致。
- 例如:Hello(junit 4.0) <--- HelloFriend(junit 4.0) <--- MakeFriends(junit 4.9)
- 解决方案:
- 将junit提取到父工程,,在子工程中声明junit的版本即可,同时也便于修改。
- 操作步骤:
- 创建父工程Parent,打包方式Packaging选pom。
pom - 子工程在
标签中声明父工程的引用,并加上(以当前文件为基准的父工程pom.xml文件的)相对路径 ... 标签 - 子工程的坐标中的,与父工程坐标中重复的内容删除(各子工程的g和v部分)
- 父工程中统一junit的依赖
- 子工程中删除junit依赖的版本号部分
- 创建父工程Parent,打包方式Packaging选pom。
- 配置继承后,执行安装命令前要先安装父工程。
//父 <project> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <g, a, v />// 指明junit的版本 <scope>4.9</scope> </dependency> </dependencies> </dependencyManagement> </project>
//子 <project> <parent> <relativePath>../Parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <g, a, v /> //删除scope标签 </dependency> </dependencies> </project>
6 聚合
- 作用:一键安装各个模块工程
- 配置方式:在一个总的聚合模块中配置各个参与聚合的模块,父工程也可以做为聚合模块。在
标签中加入各个需要聚合的模块,每个 中填入各个模块相对于聚合模块的相对路径。
<project> <modules> <module></module>// 模块1 <module></module>// 模块2 <module></module>// 模块3 </modules> </project>
这篇关于Maven的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门