maven基础
1、maven入门(maven的概念与作用)
1.1 maven的定义
(1)概述
maven:一个项目管理工具,其最核心的配置文件是pom.xml.
(2)详解
在tomcat服务器中或者我我们自己的web项目中,最核心的配置文件是web.xml;我们要使用mybatis,其中最核心的配置文件是MyBatisConfig.xml/SqlMapConfig.xml;同样的我们使用maven的核心配置文件则是pomxml
1.2 maven作用
(1)概述
a) 依赖管理
b) 项目构建
c) 统一开发结构
(2)详解
a) 依赖管理
aa) 依赖的配置(jar包的管理)
aaa) 我们创建项目时需要导入的第三方jar包的现状
aaaa) 需要导入到WEB-INF/lib
bbbb) 无配置,耦合性高
cccc) 每创建一个项目则复制一份(浪费磁盘空间)
bbb) 理想
aaaa) 不需要导入到WEB-INF/lib
bbbb) 可配置,解耦
cccc) 有一个统一的存在地方,节约磁盘空间
bb) jar包之间关系的管理
aaa) 你的项目要使用a.jar,a.jar需要使用b.jar里面的类,例如junit-4.12.jar 依赖于hamcrest-core-1.3.jar。
bbb) a.jar需要b.jar这个关系叫依赖,即junit-4.12.jar包需要hamcrest-core-1.3.jar包,这种关系为依赖。
ccc) 按照之前的做法,要先导入hamcrest-core-1.3.jar,然后在导入junit-4.12.jar,而通过maven,我们只需要导入(其实是配置实现的)junit-4.12.jar 包即可,不需要关心junit-4.12.jar 依赖于什么.
ddd) 就这一个还好,但在真实的项目中,用的jar包是非常多,可能会有几个G,这个时候依赖关系就非常复杂了,人来处理是非常耗时耗力并且准确率还没maven高.
maven可以专门管理这种依赖的关系.
b) 项目构建
maven可以帮助我们创建项目目录,一键编译,一键测试,一键打包,一键部署,而要做到这些功能的前提是要有一个统一的开发结构。开发结构规定了源码路径,测试代码路径,配置文件路径以及编译后class文件路径,只有这样才能完成一键式。例如:我们在windows下安装软件,默认情况都是安装在c:盘下的,也就是说先要做到一键式就必须规定一个统一的目录才能够实现
c) 统一开发结构
想要做到项目构建的前提是要有一个统一的开发结构,否则不可能做到项目构建的.
2、依赖的配置(jar包的管理)
2.1 仓库
(1)概述
存放jar包的
(2)分类
a) 本地仓库:在我们自己电脑上的存放jar包的仓库.
b) 远程仓库:非自己电脑上的仓库
注意:jar包的下载过程是从远程仓库下载到本地仓库,我们使用的是本地仓库.即如果我们要是用指定jar包,则需要从远程仓库中下载到本地仓库后,我们才能使用此jar包.
注意:远程仓库分为私服和中央仓库,中央仓库是所有仓库的源头,所有的开源jar包均可以通过中央仓库下载,但因下载速度比较慢,企业一般会搭建自己的私服
2.2 坐标
(1)概述
描述仓库中jar的位置
(2)详解
我们把要使用jar位置通过pom.xml告诉maven。maven就可以把指定的jar包导入到我们的项目中。例如我们需要mysql-connector-java版本为5.1.46的jar。我们只需要把jar包位置写在pom.xml中,maven就自动帮我们导入了mysql-connector-java版本为5.1.46的jar。
坐标=groupId(组织id)+artifactId(项目id)+version(版本号)
例如:mysql-connector-java版本为5.1.46的jar
组织id:mysql
项目id:mysql-connector-java
版本号:5.1.46
(3)注意
坐标是唯一的,不可重复的.
2.3 仓库配置
(1)本地仓库
windows系统下
<localRepository>D:\maven\repository</localRepository>
linux系统下
<localRepository>${user.home}/.m2/repository</localRepository>
(2)镜像仓库
镜像仓库:一种特殊的中央仓库,它代替了maven官方的仓库,起到了与maven官方仓库一样的作用。
以下是配置阿里的镜像仓库
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2.4 全局setting和用户setting
全局setting:定义了当前计算机中maven的公共配合
用户setting:定义了当前用户的配置
3、项目构建
3.1 项目结构
3.2 Maven的命令
项目的构建是通过maven命令来操作的.
3.3 idea创建maven项目(重点)
教程网上一大堆
3.4 部署
优点:将web项目部署到tomcat中,利用maven的插件比自己部署到tomcat方便,而且启动速度更快。
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8066</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
4、jar包之间关系的管理中遇到的问题
4.1 依赖传递
(1)依赖具有传递性
a) 直接依赖:在当前项目中通过依赖配置建立的建立的依赖关系
b) 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖于其他资源
(2)依赖的冲突问题
a) 规则
aa) 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
bb) 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
cc) 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
4.2 可选依赖(了解)
可选依赖:对外隐藏当前所依赖的资源–透明
4.3 排除依赖(了解)
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本–不需要
4.4 依赖的范围
4.5 依赖的范围传递(了解)
5、常见问题:
5.1统一jdk版本
前后版本要一致
(1)1.1.1打开Project Structure,在project中设置jdk版本
(2)1.1.2在Modules中设置jdk版本
(3)1.1.3在setting中设置jdk版本
(4)1.1.4重新构建项目
5.2选择不同的webapp
(1)在构建maven模板时选择如下webapp
(2)创建完后的项目结构如下:
(3)如果选择如下
(4)创建完后的项目结构如下,会比多出resources目录。