MAVEN
一、 Maven简介
目前无论使用IDEA还是Eclipse等其他IDE,使用里面ANT工具。ANT工具帮助我们进行编译,打包运行等工作。Apache基于ANT进行了升级,研发出了全新的自动化构建工具Maven。(知道:ANT有的功能MAVEN都有,只是使用起来更加方便了,功能更加强大了。)
以后创建的都是Maven项目,无论是普通java se项目还是java ee项目都是maven项目。
Maven工具基于POM(Project Object Model,项目对象模型)模式实现的。在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。
二、 Maven工具关于导jar(依赖)的实现原理
在Maven工具所谓的导入jar实际上就是关系中的“依赖”,所有需要导入的jar,都是在maven工具的pom.xml中进行实现的(配置
中央仓库:互联网上的服务器。服务器中包含所有jar包(jar包公司只要上传过)。不是必须使用哪个。默认是maven自己的网络服务器,但是由于速度较慢,我们一般都配置成国内的中央仓库(配置成阿里的)
本地仓库:本机中文件夹。文件夹包含了自己下载的jar。文件夹结构为groupid分级的文件夹/artifactid文件夹/version文件夹/包含jar包。
坐标:坐标包含了三个点,只有有一个点不一样就是不同的jar
Group Id:公司名。多用公司网址倒写。感觉和包写法一样。
Artifact Id:项目名。
Version:版本。
平时如果希望查询坐标,多去下面这个网站进行查询。
https://mvnrepository.com
http://maven.aliyun.com
三、 Maven总体配置
默认本地仓库: C:/用户/登录用户文件夹/.m2/repository
在C:/用户/用户文件夹/下创建.m2文件,去01软件中把settings.xml放入到.m2文件夹中。
1 settings.xml中配置项
1.1 配置本地仓库地址
此步骤不是必须配置,如果在公司中公司提供了本地仓库内容此步骤必须配置。
如果不配置默认安装在C:/用户/用户文件夹/.m2中
1.2 配置中央仓库
在
alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
1.3 配置JDK版本
在
jdk-1.8 true 1.8 1.8 1.8 1.8
四、 Maven项目结构
java文件夹和resource文件夹中内容(如果是web项目)最终也会被编译到WEB-INF/classes中。放到resource中配置文件和之前使用ant项目时,把配置文件放入到src的效果是完全一样的。
--demo 项目名
--.idea 项目的配置,自动生成的,不需要关注。
--src
-- main 实际开发内容
--java 写包和java代码,此文件默认只编译.java文件
--resource 所有配置文件。最终编译把配置文件放入到classpath中。
-- test 测试时使用,自己写测试类或junit工具等
--java 打包时不会保存到jar或war包中
pom.xml 整个maven项目所有配置内容。
五、 POM模型
1 依赖关系
通俗理解:导jar包。可以导入中央仓库的jar,也可以导入当前开发中其他项目打包后的jar包。
在pom.xml中
org.springframework spring-core 5.1.10.RELEASE
1.1 依赖的传递性
如果A依赖了B,那么C依赖A时会自动把A和B都导入进来。
创建A项目后,选择IDEA最右侧Maven面板lifecycle,双击install后就会把项目安装到本地仓库中,其他项目就可以通过坐标引用此项目。
1.2 取消依赖传递性
org.springframework spring-jdbc 5.1.11.RELEASE org.springframework spring-tx org.springframework spring-tx 5.1.10.RELEASE
2 继承关系
设定F项目继承E项目,在F项目中配置parent标签。在E项目POM.xml中配置的内容就被F项目继承了。相当于在F项目也配置一遍(不是所有内容都能继承的)。
com.bjsxt e 1.0-SNAPSHOT
2.1 dependencyManagement
dependencyManagement声明依赖关系。作用:统一版本管理。一般情况下都结合properties使用。
3.5.3 5.1.48 org.mybatis mybatis ${mybatis-version} mysql mysql-connector-java ${mysql-driver-version}
3 聚合关系
前提:继承。
聚合包含了继承的特性。
聚合时多个项目的本质还是一个项目。这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现
即使在idea中,也可以使用聚合在一个窗口创建多个项目。
3.1 删除模块步骤
右键模块--> remove module
右键项目 --> delete
在父项目中pom.xml中
3.2 新建之前删除过的同名项目步骤
菜单 settings --> 取消复选框的勾选。否则新建项目pom.xml中配置内容无效。
六、 Maven 中项目类型
在pom.xml中通过
packaging的可取值:
jar 默认值
pom 聚合项目时,父项目类型。没有实际意义。
war web项目。没有学习spring boot 之前,创建web项目时需要手动修改packaging类型为war类型(今天)。
packaging直接影响项目最后install时项目的打包类型。
七、 创建war类型Maven项目
1 创建maven项目
正常创建一个maven项目
在pom.xml配置文件中增加标签:
2 创建webapp文件夹
在src/main下新建webapp文件夹
在webapp下新建WEB-INF文件夹
在WEB-INF下新建web.xml
3 配置web模块
如果不配置会导致无法新建jsp文件
菜单 --> project struct -->
4 配置pom.xml
配置
导入web的依赖
配置tomcat插件
war com.bjsxt myweb 1.0-SNAPSHOT javax.servlet javax.servlet-api 3.1.0 provided javax.servlet.jsp jsp-api 2.2 provided jstl jstl 1.2 org.apache.tomcat.maven tomcat7-maven-plugin 2.2 / 80
5 运行
八、 scope属性可取值
compile:默认值,表示该依赖在编译和运行时都生效。
provided:只在编译期生效。依赖和插件冲突时使用。
runtime:只在运行时生效
test:只在测试的时候生效。依赖junit时使用。
system:和provided类似,表示该jar需要引用外部额外jar。
import:替代父项目时scope取值。通常在springboot和springcloud技术中使用。
九、 Maven项目名规范
maven的项目不要使用-(减号),而使用_ 下划线
例如:work_parent
十、 SSM项目拆分演示
使用Maven可以把以前项目的颗粒度变粗。以前的一个包,在Maven中很方便的变成一个项目。这些都是利用Maven的POM特性。
把以前的一个项目按照包拆分成下面四个项目。
pojo
mapper
service
controller
利用聚合项目演示,拆分过程略。
附:资源拷贝插件
src/main/java **/*.xml src/main/resources **/*.xml **/*.properties
十一、 热部署
热部署是Maven中tomcat插件实现的功能。可以实现一键把项目部署到服务器的tomcat中。部署的前提要求知道tomcat/webapps下manager项目访问的用户名和密码,tomcat默认是没有,所以进行配置。
1 配置tomcat中manager项目的用户名和密码步骤
在tomcat/confg/tomcat-users.xml中
重启tomcat后通过浏览器地址栏访问ROOT项目
http://ip:8080/
弹出登录框输入,用户名tomcat,密码tomcat,进入manager项目就说明配置成功了
2 配置tomcat插件
在项目的pom.xml中tomcat插件部分额外添加属性。
对于部署项目时
org.apache.tomcat.maven tomcat7-maven-plugin 8081 /abc tomcat tomcat http://192.168.8.128:8080/manager/text
点击IDEA右侧MAVEN --> plugins --> tomcat7
判断配置时path设置的项目名是否在tomcat/webapps存在。
如果不存在tomcat7:deploy
如果存在tomcat7:redeploy