Maven——maven概述、配置maven、eclipse或idea创建maven项目、maven项目结构认知(pro.xml)、maven生命周期、多模块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字符,表示有需要注意的点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值