1 Maven 入门
1.1 概述
1.1.1是什么?
传统的项目管理状态分析: 当我们在开发项目的时候,由于多个人员开发不同的模块,各个人员使用的版本的不一样,导致出现错误,jar包不统一,jar包不兼容,工程审计维护过程操作繁琐等问题。为了解决这个问题,出现了maven的技术。
maven本质: 是一个项目管理工具,将项目开发和管理过程抽象城一个项目对象模型(Project Object Model)
1.1.2为什么?
- 跨平台
- 最大的消除了构建的重复
- 可以帮助我们标准化构建过程
- 一个依赖管理工具和项目信息管理工具
- 提供了中央仓库(提供里各种工具,需要网络支持)
- 对于项目目录结构和测试用例的命名都有规范
1.1.3主要功能
- 依赖管理
一个项目对应一个pom.xml文件,通过pom对对项目进行管理,那怎么管理的呢;靠依赖管理:依赖管理就是项目的资源,你的项目可以成为别人项目的资源,别人的项目也可以成文你项目的资源;那资源在哪呢?需要使用它,就需要在电脑上找到,这个资源就在本地(仓库),我们的电脑无法给所有人访问,所有需要将所有的公共资源提取出来,保存到私服中,也可以叫私服仓库;那私服仓库的东西从哪里来呢——中央仓库。 - 项目构建
1.1.4maven的安装步骤?
IDEA默认集成了maven
- maven下载地址:https://maven.apache.org/download.cgi
- IDEA工具:2020版本以前的支持maven3.6是可以的;2021,2022支持maven3.8.5版本
- 安装和配置环境
maven环境安装和配置
1.2Maven基础概念
1.2.1仓库
用于存储资源,包含各种jar包
仓库分类:
- 本地仓库:自己电脑上存储的资源,连接远程仓库获取资源
- 远程仓库:非本计算机电脑上的仓库,本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部分/公司范围内存储资源的仓库,从中央仓库获取资源
私服的作用:
- 保存具有版权的资源,包含购买的或者自主研发的jar(中央仓库中的jar都是开源的,不能存储具有版权的资源)
- 一定范围内共享资源,仅对内部开放,不对外共享。
1.2.2坐标
什么是坐标:maven中的坐标是用与描述仓库中资源的位置 坐标的主要组成:
- groupID:定义当前Maven项目隶属组织名称(通常是域名的反写,例如:org.mybatis)
- artifactID:定义当前Maven项目的名称(通常是模块名称,例如CRE)
- version:定义当前项目版本号
Maven坐标的作用:
- 使用唯一标识:唯一性定位资源位置,通过表示可以将资源的识别与下载工具交由机器完成
1.3依赖管理
1.3.1依赖管理常用的标签
配置依赖:事例如下
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
1.3.2依赖传递
- 直接依赖:当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖资源的资源如果依赖其他的资源,当前项目间接依赖其他资源
文宇解说: 两个项目,第一个项目依赖了项目二,当项目二添加了一个依赖,这个资源也会跑到项目一;
1.3.3依赖传递的冲突问题
假设项目一依赖了junit 4.14版本,同时项目一也依赖了项目二,项目二依赖了junit4.13版本,根据依赖的传递性,项目一也就同时依赖了junit4.13版本和junit4.14版本;那问题来了,项目一依赖的是哪一个版本呢?这就是依赖传递的冲突问题。
解决方式:
- 路径优先:当依赖出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
- 声明优先:当资源在相同层级已离开时配置顺序靠前的覆盖配置顺序靠后的。
- 特殊优先:当统计配置相同资源的不同版本,后配置的覆盖优先配置的。
1.3.4可选依赖
- 可选依赖是指对外隐藏当前所有依赖的资源----不透明
<dependency>
<groupId> junit</ groupId>
<artifactId>junit</ artifactId>
<version>4.12</version>
<optional> true</ optional>
</dependency>
1.3.5排除依赖
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本----不需要
<dependency>
<groupId> junit</ groupId>
<artifactId>junit</artifactId
<version>4.12 </version>
<exclusions >
<exclusion>
<groupId>org . hamcrest</ groupId>
<artifactId>hamcrest- core</ artifactId>
</ exclusion>
</exclusions>
</ dependency>
1.3.6依赖范围
- 依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定器作用范围
- 作用范围
- 主程序范围有效(main文件范围内)
- 测试程序范围有效(test文件夹范围有效)
- 是否参与打包(package指令范围内)
依赖范围 | 对于编译 classpath 有效 | 对于测试 classpath 有效 | 对于运行时 classpath有效 | 例子 |
---|
compile | Y | Y | Y | spring-context | test | - | Y | - | junit | provided | Y | Y | - | servlet-api | runtime | - | Y | Y | jdbc驱动 | system | Y | Y | - | 本地,maven仓库之外的类库 |
依赖范围的传递性
1.4生命周期与插件
compile(编译)–>test(测试)—>package(打包)—>install(安装)
1.4.1项目构建生命周期
Maven对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点等
插件:
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认maven在各个生命周期上绑定由预设的功能
- 通过插件可以自定义其他功能,事例如下:
Tomcat7的插件:
<build>
<plugins>
<plugin>
<groupId>org. apache . maven. plugins</ groupId>
<artifactid>maven- source -plugin</ artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
2 项目实例:使用IDEA创建一个web的maven工程
步骤
1.打开IDEA,新建project,如图所示。
完成后的结构如下:
2.设置test(测试),resources(资源文件夹)文件夹。
新建文件夹如下图所示
为文件夹配置main 文件下的java 设置成 source文件夹,resource蛇者成resource文件夹,test文件夹下的Java设置成Tests文件夹,resources设置成Test resources文件夹,如下图所示。完成后点击ok.
3.编写index.jsp
<html>
<body>
<h2>Hello Maven!</h2>
</body>
</html>
4.配置pom.xm文件
添加tomcat服务器插件,进入mvnrepository,搜索tomcat maven,查找到tomcat maven包
进入这个包的第一个,使用2.1版本,单击进入这个版本,复制插件代码。 配置pom.xml文件,删除一些不需要的东西,添加Tomcat7插件,代码如下;
<?xml version="1.0" encoding="UTF-8"?>
<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.hai</groupId>
<artifactId>Maven_webProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Maven_webProject Maven Webapp</name>
<url>http://www.example.com</url>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</project>
刷新maven后可以看到tomcat7插件,如下图。
5.启动运行
选择tomcat7的tomcat7:run的运行命令,服务器就启动了,单击运行的连接,可以在浏览器上看到运行结果。 结果:
6.配置运行(扩展)
单击Add configuration 添加maven运行,配置命令为Tomcat7:run,点击IDEA的运行,就可以启动服务器。配置如下。
|