Maven最全知识点总结

目录

一、Maven的作用:

1.一键构建:

2.依赖管理:

 3.Maven将jar包存放在仓库中。

二、Maven的生命周期(构建生命周期)

注:不包括开发过程,开发过程为程序员的工作。

三、一键构建_Maven常用命令

在Maven构建项目的每一步都可以使用一句简单的命令完成(cmd中)。

注明:

四、依赖管理_Maven仓库类型

Maven项目首先访问的仓库是“本地仓库”

在Maven中,“中央仓库”拥有最全的jar包资源

注明:

五、创建Maven项目:

1.打开 idea,选择创建一个新工程

2.选择Maven工程,并使用maven的web工程模板

3.点击 Next 填写项目信息

4.点击 Next,此处不做改动,点击Finish构建项目

六、Maven工程开发_依赖范围:

七、Maven工程测试_Junit使用步骤:

1.在Maven项目中引入依赖:

2.定义一个计算器工具类

3.对定义的类进行测试:

1 (1)创建src/test/java包,并将改包设置为测试包。

(2)在src/test/java中创建测试类的包,包名一般与被测试包名一致。

(3)定义测试类,类名一般为被测试类+Test

4.测试类中编写测试方法:

5.点击测试方法边的三角运行测试方法

如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法 

八、Maven工程测试_@Before、@After

@Before修饰的方法会在测试方法之前自动执行

@After修饰的方法会在测试方法执行之后自动执行

九、依赖冲突调节(自动调节)_最短路径优先原则和最先声明原则:

1.依赖冲突:

2.Maven调解依赖冲突的第一原则—最短路径优先原则:

如:

spring-webmvc到spring-aop的路径为:

而spring-context到spring-aop的路径为:

spring-context到spring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。

3.依赖冲突调解_最先声明原则

Maven调解依赖冲突的第二原则--最先声明原则:

十、依赖冲突调节(手动调节)_排除依赖和锁定版本

排除依赖:

2.锁定版本 :

十一、Maven聚合开发_聚合关系:

之前我们在Idea中开发时会将项目的所有包放在同一个工程中。

Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。

Maven聚合开发总结:

1.将原有项目按需拆分成一个个小项目开发

2.最后打包时会将小项目打成一个完整的war包独立运行

3.聚合开发能提高代码复用率,提升开发效率

十二、Maven聚合开发_继承关系:

多继承

十三、Maven聚合案例_搭建父工程:

IDEA中工程project和模块Module有什么区别?


一、Maven的作用:

1.一键构建:

项目要经过编译、测试、运行、打包、安装部署等一系列过程,这些过程称为构建。通过Maven工具,可以使用简单的命令轻松完成构建工作。

2.依赖管理:

Maven工具中将所有jar包存放在仓库中,需要什么jar包导入jar包地址即可,运行时根据坐标即可从maven仓库中拿到jar包,项目中不用再配置jar包,所有maven项目的jar包都从maven仓库中导入,大大减小了项目的内存大小。

Maven最全知识点总结_第1张图片

 3.Maven将jar包存放在仓库中

二、Maven的生命周期(构建生命周期)

如下图的一系列过程称为Maven的构建生命周期:

 

注:不包括开发过程,开发过程为程序员的工作。

三、一键构建_Maven常用命令

在Maven构建项目的每一步都可以使用一句简单的命令完成(cmd中)。

Maven最全知识点总结_第2张图片

注明:

Maven可以依赖插件来执行命令,比如clean、validate等命令是maven自带的命令,tomcat7命令是引入的第三方插件。

四、依赖管理_Maven仓库类型

 Maven最全知识点总结_第3张图片

  1. Maven项目首先访问的仓库是“本地仓库”

  2. 在Maven中,“中央仓库”拥有最全的jar包资源

注明:

(1)远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配置远程仓库,则会直接从中央仓库下载。

(2)中央仓库访问速度较慢,我们一般都会配置镜像代理中央仓库的下载请求,如阿里镜像、华为镜像等。

五、创建Maven项目:

1.打开 idea,选择创建一个新工程

 Maven最全知识点总结_第4张图片

2.选择Maven工程,并使用mavenweb工程模板

 Maven最全知识点总结_第5张图片

3.点击 Next 填写项目信息

 Maven最全知识点总结_第6张图片

4.点击 Next,此处不做改动,点击Finish构建项目

六、Maven工程开发_依赖范围:

`Maven最全知识点总结_第7张图片

这是由于项目中引入了ServletJspjar包,而在项目运行时,

Tomcat要使用它自带的ServletJspjar包,这样就造成了jar包冲突。但如果项目不引入ServletJspjar包,则根本无法通过编译。

此时可以设置依赖的作用范围解决该问题,设置ServletJspjar 包只在编译期起作用运行时不起作用,这样不仅可以通过编译, 还能在运行时避免jar包冲突。

通过在 中添加 ,可以设置依赖的作用范围,有以 下取值:

 Maven最全知识点总结_第8张图片

所以对于ServletJsp依赖,我们添加依赖范围为provided即可。

 Maven最全知识点总结_第9张图片

 Maven最全知识点总结_第10张图片

刷新Maven,即可正常访问ServletJsp

七、Maven工程测试_Junit使用步骤:

1.在Maven项目中引入依赖:

 Maven最全知识点总结_第11张图片

2.定义一个计算器工具类

 Maven最全知识点总结_第12张图片

3.对定义的类进行测试:

1 (1)创建src/test/java包,并将改包设置为测试包。

(2)在src/test/java中创建测试类的包,包名一般与被测试包名一致。

(3)定义测试类,类名一般为被测试类+Test

 Maven最全知识点总结_第13张图片

4.测试类中编写测试方法:

 Maven最全知识点总结_第14张图片

  

5.点击测试方法边的三角运行测试方法

如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法 

Maven最全知识点总结_第15张图片

八、Maven工程测试_@Before、@After

Maven最全知识点总结_第16张图片

在测试类中,

@Before修饰的方法会在测试方法之前自动执行

@After修饰的方法会在测试方法执行之后自动执行

之后的学习中,我们可以设置前置方法为获取资源,后置方法为释放资源。

Maven最全知识点总结_第17张图片

九、依赖冲突调节(自动调节)_最短路径优先原则和最先声明原则:

1.依赖冲突:

假设你的项目依赖jarAjarA又依赖jarB。当添加jarA时,Maven会把jarB也自动加入到项目中。这时就可能会产生依赖冲突问题,比如依赖A会引入依赖C,依赖B 也会引入依赖C。如果不进行调解则会引入两个依赖C,那么Maven就会发生依赖冲突。

Maven最全知识点总结_第18张图片

2.Maven调解依赖冲突的第一原则最短路径优先原则:

也就是说项目依赖关系树中路径最短的版本会被使用。例如,假设有几个jar包之间的依赖关系是: A->B->C->D(2.0) E->F->D(1.0) ,如果同时引入AE,那么D(1.0)会被使用,因为ED的路径更短。

如:

spring-webmvcspring-aop的路径为:

spring-contextspring-aop的路径为:

 

spring-contextspring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。

3.依赖冲突调解_最先声明原则

Maven最全知识点总结_第19张图片

最短路径优先原则不能解决所有问题,比如这样的依赖关系: A–>B–>C(1.0) D–>E–>C(2.0) ,同时引入AD之后,C(1.0)C(2.0)的依赖路径长度都为2。此时第一原则将不能解决问题

Maven调解依赖冲突的第二原则--最先声明原则:

在依赖路径长度相等的前提下,在POM中依赖声明的顺序靠前的会被解析使用。

十、依赖冲突调节(手动调节)_排除依赖和锁定版本

如果不想使用Maven默认的冲突调解方式,有两种方式可以手动进行冲突调解。

  1. 排除依赖:

如:如果想使用spring-webmvcspring-aop包,那么可以让spring-context引入时排除引入spring-aop包,这样就可以使用spring-webmvcspring-aop包了,写法如下:

Maven最全知识点总结_第20张图片

 

2.锁定版本

Maven中为某个jar包配置锁定版本后,不考虑依赖的声明顺序和依赖路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。以下可以直接配置spring-aop锁定的版本。

Maven最全知识点总结_第21张图片

十一、Maven聚合开发_聚合关系:

Maven最全知识点总结_第22张图片

之前我们在Idea中开发时会将项目的所有包放在同一个工程中。

Maven最全知识点总结_第23张图片

 Maven最全知识点总结_第24张图片

假如我们现在写了两个项目分别是电商卖家端和电商买家端,两个项目都需要调用serive层查询订单的方法。原来的写法如下:

Maven最全知识点总结_第25张图片

重复编码造成开发效率降低。

而使用maven后,我们可以把之前的项目按需拆分成一个个小项目,之后将小项目发布到仓库中,小项目之间也可以互相引用,并且在我们的项目中引入需要的小项目即可。

Maven最全知识点总结_第26张图片

Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。

Maven最全知识点总结_第27张图片

Maven聚合开发总结:

1.将原有项目按需拆分成一个个小项目开发

2.最后打包时会将小项目打成一个完整的war包独立运行

3.聚合开发能提高代码复用率,提升开发效率

十二、Maven聚合开发_继承关系:

Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程。

多继承

Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在 配置多继承。

Maven最全知识点总结_第28张图片

十三、Maven聚合案例_搭建父工程:

Maven最全知识点总结_第29张图片

创建Maven工程作为父工程,父工程是虚拟工程,不需要写逻辑代码,所以删除父工程的src目录。

由于父工程的依赖和插件子工程都能继承,所以可以将需要的依赖和插件都配置在父工程中。

pom

    
        
        5.2.12.RELEASE
    
    
        
        
            org.mybatis
            mybatis
            3.5.7
        
        
        
            mysql
            mysql-connector-java
            8.0.26
        
        
        
            com.alibaba
            druid
            1.2.8
        
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        

        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-web
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
        
            org.springframework
            spring-tx
            ${spring.version}
        
        
            org.aspectj
            aspectjweaver
            1.8.7
        
        
        
            org.apache.taglibs
            taglibs-standard-spec
            1.2.5
        
        
            org.apache.taglibs
            taglibs-standard-impl
            1.2.5
        
        
        
            javax.servlet
            servlet-api
            2.5
            provided
        
        
            javax.servlet
            javax.servlet-api
            3.0.1
            provided
        
        
        
            javax.servlet.jsp
            jsp-api
            2.0
            provided
        
        
        
            junit
            junit
            4.12
            test
        
        
            org.springframework
            spring-test
            ${spring.version}
        
        
        
            log4j
            log4j
            1.2.12
        
    

    
        
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.1
                
                    8080
                    /
                    UTF-8
                    tomcat7
                    
                        %1$tH:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n 
                    
                
            
        
    

IDEA中工程project和模块Module有什么区别?

答:没有什么区别,只是新工程会占据一个新窗口,一般写父工程时定义为新工程,写子工程时定义为新模块。

你可能感兴趣的:(Maven,maven,java,jar)