传统项目管理状态分析
1)jar包不统一,jar包不兼容
2)工程升级维护过程操作繁琐
……
Maven
Maven的本质是一个项目管理工具,讲项目开发和管理过程抽象成一个项目对象模型(POM)。
作用:
1)项目构建:提供标准的、跨平台的自动化项目构建方式。
2)依赖管理:方便快捷的管理项目的资源(jar包),避免资源间的版本冲突问题。
3)统一开发结构:提供标准的、统一的项目结构。
下载与环境配置
下载地址:https://maven.apache.org/download.cgi,Linux选择tar.gz,Windows选择zip,
环境配置:新建系统变量MAVEN_HOME,在Path配置%MAVEN_HOME%\bin
检测配置成功:cmd->mvn
仓库
仓库:用于存储资源,包含各种jar包
仓库分类:
1)本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源。
2)远程仓库:非本机电脑上的仓库,为本地仓库提供资源。中央仓库(Maven团队维护,存储所有资源的仓库)、私服(部门/公司范围内存储资源的仓库,从中央仓库获取资源)
私服的作用:
1)保护具有版权的资源,包含购买或自主研发的jar。中央仓库中的jar都是开源,不能存储具有版权的资源。
2)一定范围内共享资源,仅对内部开放,不对外共享。
坐标
Maven中的坐标用于描述仓库中资源的位置。
https://repo1.maven.org/maven2
Maven坐标主要组成:
grounpId:定义当前Maven项目隶属组织名称(通常是域名反写)。
artifactId:定义当前Maven项目名称(通常是模块名称)。
version:定义当前版本号
packaging:定义该项目的打包方式
https://mvnrepository.com
作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的表示与下载工作交由机器完成。
仓库配置-本地仓库
默认路径为:${user.home}/.m2/repository
在apache-maven-3.8.6\conf\setting.xml中增加想更改的路径
D:\maven\repository
仓库配置-远程仓库
配置镜像仓库:
<!--配置具体仓库的下载镜像-->
<mirror>
<!--此镜像的唯一标识符,用来区分不同的mirror元素-->
<id>nexus-aliyun</id>
<!--对哪种仓库进行镜像(代替哪个仓库)-->
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<!--镜像URL-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
Maven项目结构
1)目录文件
main,test
2)与src平级创建pom.xml
<project>
<!--指定pom的模型模板-->
<modelVersion>4.0.0</modelVersion>
<!--打包方式,web为war,java为jar-->
<packaging>war</packaging>
<groupId>所属组群</groupId>
<artifactId>所属项目</artifactId>
<version>版本号</version>
<packaging>项目最后的作用</packaging>
<!--依赖注入-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId>要导入的jar包名称</artifactId>
<version>版本号</version>
</dependency>
</dependencies>
</project>
Maven构建命令
mvn compile——编译
mvn clean——清理
mvn test——测试
mvn package——打包
mvn install——安装到本地仓库
使用多个命令时用空格分隔
插件创建工程
mvn archetype:generate
-DgroupId=项目
-DartifactId=项目名称
-DartchetypeArtifactId=maven-archetype-quickstart
-Dversion=版本号
-snapshot -DinteractiveNode=false
Idea创建Maven
1)配置默认maven
2)使用模块创建maven
依赖传递
直接传递:在当前项目中通过依赖配置建立的依赖关系。
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源。
依赖传递冲突问题:
1)路径优先:当依赖中出现相同的资源时,层级越深,优先级越低。
2)声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
3)特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
可选依赖:增加true
依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围。
作用范围:主程序范围有效(main文件夹范围内)、测试程序范围有效(test文件夹范围内)、是否参与打包(package指定范围内)
scope | 主代码 | 测试代码 | 打包 |
---|---|---|---|
compile(默认) | Y | Y | Y |
test | Y | ||
provided | Y | Y | |
runtime | Y |
依赖范围传递性(行为直接依赖,项目一;列为间接依赖,项目二)
compile | test | provided | runtime | |
---|---|---|---|---|
compile(默认) | compile | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | runtime |
项目构建生命周期
maven对项目构建的生命周期划分为3套:
clean:清理工作。
default:核心工作,如编译,测试,打包,部署等。
site:产生报告,发布站点等
插件
插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能。
默认maven在各个生命周期上绑定有预设的功能。
通过插件可以自定义其他功能。
添加插件
在pom.xml中
<project>
<build>
<plugins>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<executions>
<execution>
<!--对应的执行位置-->
<goals>
<goal></goal>
</goals>
<!--对应的生命周期过程-->
<phase></phase>
</execution>
</executions>
</plugins>
</build>
</project>