目录
一、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仓库中导入,大大减小了项目的内存大小。
3.Maven将jar包存放在仓库中。
二、Maven的生命周期(构建生命周期)
如下图的一系列过程称为Maven的构建生命周期:
注:不包括开发过程,开发过程为程序员的工作。
三、一键构建_Maven常用命令
在Maven构建项目的每一步都可以使用一句简单的命令完成(cmd中)。
注明:
Maven可以依赖插件来执行命令,比如clean、validate等命令是maven自带的命令,tomcat7命令是引入的第三方插件。
四、依赖管理_Maven仓库类型
Maven项目首先访问的仓库是“本地仓库”
在Maven中,“中央仓库”拥有最全的jar包资源
注明:
(1)远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配置远程仓库,则会直接从中央仓库下载。
(2)中央仓库访问速度较慢,我们一般都会配置镜像代理中央仓库的下载请求,如阿里镜像、华为镜像等。
五、创建Maven项目:
1.打开 idea,选择创建一个新工程
2.选择Maven工程,并使用maven的web工程模板
3.点击 Next 填写项目信息
4.点击 Next,此处不做改动,点击Finish构建项目
六、Maven工程开发_依赖范围:
这是由于项目中引入了Servlet和Jsp的jar包,而在项目运行时,
Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突。但如果项目不引入Servlet和Jsp的jar包,则根本无法通过编译。
此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar 包只在编译期起作用,运行时不起作用,这样不仅可以通过编译, 还能在运行时避免jar包冲突。
通过在
中添加 ,可以设置依赖的作用范围,有以 下取值: 所以对于Servlet和Jsp依赖,我们添加依赖范围为provided即可。
刷新Maven,即可正常访问Servlet和Jsp
七、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.依赖冲突:
假设你的项目依赖jar包A,jar包A又依赖jar包B。当添加jar包A时,Maven会把jar包B也自动加入到项目中。这时就可能会产生依赖冲突问题,比如依赖A会引入依赖C,依赖B 也会引入依赖C。如果不进行调解则会引入两个依赖C,那么Maven就会发生依赖冲突。
2.Maven调解依赖冲突的第一原则—最短路径优先原则:
也就是说项目依赖关系树中路径最短的版本会被使用。例如,假设有几个jar包之间的依赖关系是: A->B->C->D(2.0) 和 E->F->D(1.0) ,如果同时引入A和E,那么D(1.0)会被使用,因为E到D的路径更短。
如:
spring-webmvc到spring-aop的路径为:
而spring-context到spring-aop的路径为:
spring-context到spring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。
3.依赖冲突调解_最先声明原则
最短路径优先原则不能解决所有问题,比如这样的依赖关系: A–>B–>C(1.0) 和 D–>E–>C(2.0) ,同时引入A和D之后,C(1.0)和C(2.0)的依赖路径长度都为2。此时第一原则将不能解决问题
Maven调解依赖冲突的第二原则--最先声明原则:
在依赖路径长度相等的前提下,在POM中依赖声明的顺序靠前的会被解析使用。
十、依赖冲突调节(手动调节)_排除依赖和锁定版本
如果不想使用Maven默认的冲突调解方式,有两种方式可以手动进行冲突调解。
排除依赖:
如:如果想使用spring-webmvc的spring-aop包,那么可以让spring-context引入时排除引入spring-aop包,这样就可以使用spring-webmvc的spring-aop包了,写法如下:
2.锁定版本 :
在Maven中为某个jar包配置锁定版本后,不考虑依赖的声明顺序和依赖路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。以下可以直接配置spring-aop锁定的版本。
十一、Maven聚合开发_聚合关系:
之前我们在Idea中开发时会将项目的所有包放在同一个工程中。
假如我们现在写了两个项目分别是电商卖家端和电商买家端,两个项目都需要调用serive层查询订单的方法。原来的写法如下:
重复编码造成开发效率降低。
而使用maven后,我们可以把之前的项目按需拆分成一个个小项目,之后将小项目发布到仓库中,小项目之间也可以互相引用,并且在我们的项目中引入需要的小项目即可。
Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。
Maven聚合开发总结:
1.将原有项目按需拆分成一个个小项目开发
2.最后打包时会将小项目打成一个完整的war包独立运行
3.聚合开发能提高代码复用率,提升开发效率
十二、Maven聚合开发_继承关系:
Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程。
多继承
在Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在
配置多继承。
十三、Maven聚合案例_搭建父工程:
创建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有什么区别?
答:没有什么区别,只是新工程会占据一个新窗口,一般写父工程时定义为新工程,写子工程时定义为新模块。