Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶(phase)中插件(plugin)目标(goal)的逻辑。
简化了项目依赖管理:jar包管理,防止了冲突
便于与持续集成工具(jenkins)整合
便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更
新,而不用自己去编译。
a) 中央仓库(Central Repository), 官方维护, 存放所有相关的jar包(包含各个版本)
b) 本地仓库(Local Repository), maven项目都是从本地仓库加载jar包的.
c) 镜像仓库(Mirror Repository), 国内有能力的组织(机构)搭建的仓库, 这个仓库就是将中央仓库中的所有内容复制了一份存起来.
l jar包的定位: 坐标, 三部分构成
Ø GroupId: 一般是逆向公司域名 com.bjsxt
Ø ArtifactId: 一般是项目(jar)名 mybatis-3.5.2
Ø Version: 版本号 3.5.2
安装
将maven的压缩包解压到指定的文件夹中
配置maven的本地仓库
配置
在maven的目录中的conf文件中的setting.xml
① 本地仓库的路径,在pluginGroups标签上
② 镜像仓库,在mirrors标签下
③ 配置jdk的版本,在Profiles标签下
① jar类型项目的结构
② jar类型项目的特点
i. jar类型的项目,相当于我们以前的JAVASE项目。
ii. jar项目编译后的项目结构体系和原有的JAVASE项目编译后的结构体系相 同
iii. 默认在test目录下的测试代码是不会编译到项目中的。
① 在war项目下的src下的main目录下手动创建java和resources目录。
java目录作为java源码存方法目录
resources目录作为配置文件目录
② 将创建的java目录设置为源码目录
③ 将resources目录设置为配置文件存储目录
\1. war类型项目结构的作用
4.war类项目项目的特点
i. 相当于我们以前的JAVAEE项目,完成web项目的开发。
ii. 项目最终打成的在Tomcat中运行的war包和原有的JAVAEE项目的结构体系完全相同
pom(Project Object Model)文件的作用
用来声明当前项目自己的资源坐标以及要使用的其他资源的资 源坐标等,由
maven 工具自动的根据该文件的变化来管理项目中 的资源。
pom文件的配置内容
1、modelverson:声明模块的版本
2、当前项目的资源坐标:给maven查看 ,并便于maven查找到该项目给其他项目使用
3、配置第三方的资源坐标:让maven根据坐标从本地仓库中引入第三方的资源到项目
中使用,如果本地仓库中没有,则会自动从云仓库中下载
compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用provided 依 赖在编译和测试时需要,在运行时不需要,比如:servlet api/jsp-api 被 tomcat 容器提供。
runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。
system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用
maven指令的生命周期
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
常用指令
clean:清除maven项目下的target目录中的class和本地仓库中已打包的文件。
validate:验证工程是否正确,所有需要的资源是否可用。
compile:即编译项目中的java文件,并存放在项目的编译目录。
test: 即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,这里test过程可以在pom中通过配置跳过。
package:将本地编译好的文件打包为war 或者jar。
verify: 运行任何检查,验证包是否有效且达到质量标准。
install:将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用。
site:生成项目报告,站点,发布站点。
deploy:将打包在本地仓库中的项目发布到服务器,供他人依赖使用
依赖
假设两个工程A和B, A当前需要使用B的功能, 我们就说A依赖B. 依赖关系是一个比较简单的关系. 依赖关系只需要通过在pom文件中指定坐标即可实现.
继承
假设两个工程A和B, B工程是在A工程基础上做的扩展. 此时, B工程继承了A工程. 继承是比依赖更紧密的一种关系. 要求父工程必须是一个pom工程. 在继承关系中, 子工程明确父工程, 但是父工程不明确子工程.
聚合(重点)
多个Model共同组成一个Project. 对外看起来是一个工程. 必须先由继承关系. 在聚合工程中, 是一个双向的关系.
Maven项目依赖关系的使用
① 创建项目A完成功能开发
② 在项目A的pom文件中配置项目B或者其他第三方资源的资源坐标
③ 在项目A中正常调用项目B的资源即可。
依赖原则
路径不同间接依赖中maven采用的是路径最短者优先
路径相同间接依赖中maven 采用的是依赖定义顺序从上到下
注意
在开发阶段,并且在同一个工作空间,不同的maven项目之间可以通过资源坐标直接调
用其资源,无需将其打包放到本地仓库中。但是在项目运行期间,必须根据依赖关系的
顺序依次打包,才能正常运行。比如A–>B—>C—>D打包的顺序为先打包D再打包C再
打包B再打包A。最简单的记忆方法,就是不管是开发阶段还是运行阶段只要项目A依赖
的其他项目都需要进行打包,其他项目每修改依次就重新打包一次。
注意:
java基本语法中的继承是继承理论的一种应用,父项目一定是pom类型的。
pom类型的项目只做资源管理,不做功能开发。在继承关系中父项目创建 为pom类
型比较合理。
pom类型项目的创建
先创建一个jar类型的项目,然后将目录结构删除,只保留pom文件
然后在pom文件中使用packaging标签修改项目的类型为pom类型
(1) maven项目的继承关系中的父项目要创建为pom类型
(2) 继承关系中的maven项目是相互独立的,本质就是两个项目
聚合关系:
将本来一个整体的事物,拆分为不同的零件。每个零件在物理视图上是独立的,也就说肉眼
看到的是多个零件。但是在逻辑上这些零件是属于一个个体的。这些零件之间的关系就是聚
合关系。
继承和聚合之间区别
两者的目的是不一样的,聚合的目的是一个项目的拆分,继承的目的是不同的项目减少重复
配置。
① 使用maven将项目整体打包到本地仓库中
② 在idea中找到war类型的web项目将其target文件夹
下的war包上传到其他的tomcat中,然后启动其他的tomcat
③ 在本地的浏览器中访问另一个中的web项目
注意:访问项目的虚拟项目的名字为tomcat下的war包解压后的文件夹的名字
\1. 启动tomcat服务器
\2. 访问tomcat服务器的首页(广告页,项目A)
tomcat自带的ROOT项目,是tomcat自带的一个web项目。
我们可以通过浏览器访问,然后在浏览器中管理tomcat中的项目资源。
\3. 点击tomcat首页的manager app
当我们点击manager APP时,会先提示我们进行登录,在登录页面中输入
账号和密码即可进入到项目资源管理页面。我们点击取消,进入登录用户
配置提示页面,在该页面中,tomcat提示我们需要在tomcat-user.xml
文件中去配置我们的账户信息。
\4. 在tomcat-user.xml中配置账户信息
\5. 登录ROOT项目,使用manager APP功能管理tomcat中的项目资源
② maven远程上传war项目的配置和使用
\1. 在war项目中的pom文件中配置项目远程部署的参数信息
\2. 启动远程部署
\3. 在本地的浏览器中访问tomcat中的项目即可
注意:
在使用maven远程部署项目时,一定要确保远程端tomcat是开启的。tomcat:run命令是本地运行项目。
管理项目中的资源,使用maven创建项目完成功能开发。
① 创建maven项目,类型为jar
② 在java目录下声明源码完成功能开发
③ 在pom.xml文件中配置需要使用的第三方资源
① 创建maven项目, 类型为war
② 完善war项目的目录结构,创建java和resources目录
③ 在pom.xml文件中配置web开发的依赖资源
servlet的依赖,jsp的依赖,jstl的依赖,tomcat的插件
④ 在java目录下声明代码完成功能开发
⑤ 在web目录下声明页面资源
① 创建一个pom类型的项目,管理拆分后的项目所有的资源
② 选中pom项目右键连续创建四个子moudle
pojo:jar类型
mapper:jar类型
service:jar类型
web:war类型
③ 配置父项目中的pom文件,配置SSM开发相关的资源
④ 配置pojo子项目中的pom文件
⑤ 配置mapper子项目中的pom文件(依赖pojo)
⑥ 配置service子项目的pom文件(依赖mapper)
⑦ 配置web子项目的pom文件以及目录结构(依赖service)。
⑧ 在web子项目中的resources目录下配置SSM的配置文件
⑨ 完成功能开发
⑩ 在父项目中对整个项目资源进行clean和install,然后再war项目中
使用指令完成项目的运行或者远程部署