Maven项目管理工具
Ⅰ、概述以及作用 0
官网——>Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中央信息管理项目的构建,报告和文档。
即——>Maven是apach旗下,一个跨平台的项目管理工具,用于项目自动构建和项目依赖。
1)跨平台:
因为maven项目管理工具,就是用java开发的,而java具有跨平台特性,因此maven是一个跨平台的项目管理工具;
2)项目构建:
将一个写好的javaweb项目,变成一个可以运行的javaweb项目的过程就叫做项目构建;
项目构建包含以下几个阶段:
清理:清理上一次编译之后的字节码文件;
编译:将写好的javaweb项目编译为字节码文件;
测试:执行项目中所有单元测试的代码;
部署:指的是将项目发布到tomcat服务器上;
3)项目依赖:
没有maven之前:
1.每一次需要依赖其他模块功能时,都需要去下载jar包,放到项目lib文件夹下,并构建静态路径;
2.多次创建项目,如果使用相同jar包,需要重复下载到lib文件夹下;会导致过多重复jar包占用项目空间;
3.每次下载jar包还需要下载该jar包所依赖的其他jar包;
4.只能根据同一个项目不同的功能模块来划分项目,纵向划分模块项目开发;
有了maven之后:
1.每一需要依赖其他功能模块时,只需要在maven配置文件中,指定需要的jar包即可,maven自动下载;
2.maven会提供一个统一的文件夹空间(本地仓库),来存放项目所需要的所有jar包,每个jar包存一次,不会重复,哪一个项目需要就会到该文件夹下引入;
3.maven会自动帮你下载jar包所依赖的其他jar包;
4.不仅可以按照功能纵向划分项目模块,还可以根据项目架构横向划分项目,每一个划分之后的模块通过打包的方式来引用,构建为一个完整的项目;
2.maven项目管理工具的具体使用
Ⅱ、配置maven
1)下载maven项目管理工具:
http://maven.apache.org/download.cgi
2)直接解压,无需安装
3)配置环境变量
再在path中加%MAVEN_HOME%\bin\;
4)校验maven是否安装成功
window + r 之后输入cmd,之后输入mvn -v
。如果出现版本信息,则安装成功。
5)修改maven配置文件
修改apache-maven-3.6.3\conf\settings.xml
5.1修改本地仓库:
<localRepository>E:\repository(随便写个路径,但是自己要记得,便于查找)</localRepository>
5.2配置镜像仓库:(阿里云)
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
5.3指定项目开发jdk版本,注意位置哦
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
6)eclipse中集成maven工具
Ⅲ、eclipse创建maven项目
约束优于配置,配置优于编码
如果生成的是maven web项目,会报错。👇
👉BUG——eclipse中创建maven web项目报错web.xml is missing and is set to true👈
Ⅳ、idea创建maven项目
一、普通maven项目
第一步:
第二步:
第三步:
第四步:
二、maven web项目
在maven普通项目的基础上+👇
做教程时,多点了一次web,所以有web和web2,没有删除多余得web2,但是丝毫不影响教程……
Ⅴ、maven项目结构认知 0
一、maven普通项目
二、maven web项目
多了一个webapp,其他没区别。使用idea可以生成完整结构~
三、pom.xml配置文件 0
1、默认内容
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hbw</groupId>
<artifactId>testDay01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
1)xmlns:限制
2)modelVersion:版本
3)groupId:分组坐标
4)artifactId:唯一标识
5)version:这个项目是第几版
2、打包格式
<packaging>war</packaging>
packaging:打包格式,默认是jar包,可不写
3、依赖 0
中央仓库地址:https://mvnrepository.com/
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
1)写在<dependencies> </dependencies>
标签里面,表示依赖(自动构建,即自动下载)
2)有些依赖中还有个<scope></scope>
标签,👇注意👇
test:指的是该jar包只能在测试程序中使用,不能在主程序中使用;只参与生命周期中的编译打包,不参与部署
provided:指的是jar包可以在主程序和测试程序中使用,只参与项目生命周期中的编译打包,不参与部署
compile:jar包默认作用范围,可以在主程序中使用,也可以在测试程序中使用,并且参与项目生命周期所有阶段
3)maven只会自动下载jar包所依赖的compile作用范围内的其他jar包
4、maven的依赖排出
1.当jar包相同时,maven会自动解决jar包冲突,根据路径最短者优先解决冲突;如果路径相同时,maven会使用pom.xml文件中后引入的jar包;
2.当jar包不同时,如何排出不想依赖传递的jar包
<dependency>
<groupId>com.offcn</groupId>
<artifactId>maven0824</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--依赖排出 -->
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
</exclusions>
</dependency>
5、maven常用命令 0
引用——
1)清理:
clean清除命令,清理上一次编译之后的字节码文件;
绑定清理插件:maven-clean-plugin:2.5执行清理工作
2)编译:
compile编译命令,将java项目编译为字节码文件;
绑定插件:maven-resources-plugin:2.6定位项目中所有的代码和文件(根据约定目录结构定位)maven-compiler-plugin:3.1编译源程序
3)测试:
test测试命令,执行项目中所有的单元测试代码,并生成测试报告;
绑定插件:
maven-resources-plugin:2.6:resources:定位主程序资源文件
maven-compiler-plugin:3.1:compile:编译主程序资源文件
maven-resources-plugin:2.6:testResources:定位测试程序源文件
maven-compiler-plugin:3.1:testCompile:编译测试程序源文件
maven-surefire-plugin:2.12.4:test:执行所有的测试单元代码,并生成测试报告
4)打包:
package打包命令,将项目打包为jar包或者war包;
绑定插件:
maven-resources-plugin:2.6:resources:定位主程序资源文件
maven-compiler-plugin:3.1:compile:编译主程序资源文件
maven-resources-plugin:2.6:testResources:定位测试程序源文件
maven-compiler-plugin:3.1:testCompile:编译测试程序源文件
maven-surefire-plugin:2.12.4:test:执行所有的测试单元代码,并生成测试报告
maven-jar-plugin:2.4:jar:将项目打包为jar包
如果打包web项目:绑定插件>maven-war-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<directory>WebContent</directory>
</resource>
</webResources>
</configuration>
</plugin>
5)部署:
install/deploy:install指的是打包部署到本地仓库;deploy指的是打包部署的远程仓库
绑定插件:
maven-resources-plugin:2.6:resources:定位主程序资源文件
maven-compiler-plugin:3.1:compile:编译主程序资源文件
maven-resources-plugin:2.6:testResources:定位测试程序源文件
maven-compiler-plugin:3.1:testCompile:编译测试程序源文件
maven-surefire-plugin:2.12.4:test:执行所有的测试单元代码,并生成测试报告
maven-jar-plugin:2.4:jar:将项目打包为jar包
maven-install-plugin:2.4:install:将打包好的项目存放到本地仓库
Ⅵ、maven生命周期
Maven项目有三个独立的生命周期:
Clean生命周期:清理前clean-pre,清理clean,清理后clean-post
Site生命周期:site-pre生成站点前的准备工作;site生成站点,site-post生成站点后的工作
Default生命周期:清理,编译,测试,打包,部署
【模糊得紧】
👉点击👈https://www.runoob.com/maven/maven-build-life-cycle.html
Ⅶ、多模块maven项目
以下使用idea测试
第一步:创建一个普通maven项目,作为父模块项目
见上文《idea创建maven项目》
第二步:在普通maven项目中,新增模块项目
第三步:如果需要把子模块发布到tomcat,需要将子模块项目变成maven web项目???
操作见上文《idea创建maven项目》
一、maven继承
查看子模块项目的pro.xml发现,👇
发现:
子模块会继承父模块的坐标groupId和version。而且还会继承compile作用范围内的jar包
二、maven聚合
查看父模块项目的pro.xml发现,👇
1)发现:
父模块中包含了所有子模块。
2)疑惑:
当需要打包时,所有模块的打包顺序是什么样子的?
3)例如:
controller依赖service,service依赖dao。那么就应该从后向前导包(没有依赖其他模块的先导包),但是这样就比较麻烦。
三层架构
Controller:控制层用于处理请求,响应数据到页面;
Service:专门用于做业务逻辑处理;
Dao:持久层,专门和数据库做交互;
4)maven聚合的作用:
可以自动打包各个子模块项目(使用命名install将父模块打包时,其他子模块就能被自动打包)
三、maven多模块项目版本管理
注意:
父模块中,只申明不导包。子模块中,只导包不申明。
<!--父模块中,只做jar包的申明,不引入-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--子模块中,只做jar包的引入。不再指名版本,因为父模块中已经申明了jar包的版本-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>
四、maven统一变量替换
一个项目需要很多jar包,那么可能存在许多jar包都是相同的版本,如果需要跟换该版本,就需要更改许多jar包的版本,比较麻烦。
那么使用变量,来统一代替jar包的版本。
注意:都是写在父模块的pom.xml中的
<!--定义变量-->
<properties>
<!--junit.version这个名字是随便取的-->
<junit.version>4.1.7.RELEASE</junit.version>
</properties>
<!--使用变量,统一替换-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
PS:
用于学习记录、交流
如果存在错误,还望指正
目录带0字符,表示有需要注意的点