第3章-第1节
一、知识点
maven的简介、安装和使用、仓库管理、项目构建、多模块项目、依赖管理
二、目标
-
学习了解什么是maven
-
能够配置maven
-
使用maven创建项目
-
掌握maven创建多模块项目的方式
-
掌握maven的依赖管理和项目构建
三、内容分析
-
重点
-
maven的安装和使用
-
依赖管理
-
多模块项目的创建
-
-
难点
-
多模块项目的创建
-
四、内容
1、认识Maven
1.1maven简介(了解)
Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project LifeCycle),一个依赖管理系统(Dependency managerment System),和用来运行定义在生命周期(phase)中插件(plugin)目标(goal)的逻辑。
Maven有一个生命周期,当你运行mvn install的时候被调用。这条命令告诉Maven执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个JAR文件这样的工作。 此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
1.2为什么使用maven
-
第三方jar包
我们在使用第三方框架的时候,我们会把jar包复制粘贴到WEB-INF/lib下。每次新创建工程都要这么做,造成工作区有大量的重复文件,如果使用maven,会让每个jar包在本地仓库中只保存一份,需要jar包的工程只要以坐标的方式简单的引用一下就行了。可以大大节约空间,让项目更轻巧。
-
jar包之间的依赖关系
jar包往往不是孤立的,很多jar包需要在其他jar包的支持下才能正常工作。当我们去使用一个从未使用过的jar包,我们怎么知道这个jar包依赖于哪些其他的jar包呢?使用maven,可以自动将当前jar包所依赖的其他jar包全部导进来,无需人工参与,节约了我们大量的时间和精力。
-
获取第三方jar包
我们会使用很多的jar包,每个jar包获取的方式不尽相同。有时候找一个jar包要找遍互联网,找到的还是不规范的,不能使用。使用maven我们可以享受一个完全统一规范的jar包管理体系。
-
将项目拆分成多个工程模块
有些大型项目已经不能通过package结构来划分模块了,这时候必须将项目拆分成多个工程协同开发。
2、使用maven
-
下载
-
配置环境变量
- 修改maven配置文件,conf下的settings.xml 第55行
<localRepository>路径地址</localRepository>
-
IDEA配置maven
-
在 IntelliJ IDEA 工作区上方的菜单栏中选择 File ,然后在下拉菜单中选则 Settings...,如下图
-
-
在弹出对话框中,展开“Build,Execution,Deployment”,在 Build Tools 下选择 Maven,如下图
-
在 Maven home path 中,指定本地 Maven 的位置
-
勾选 User Settings file 后面的 Override,并指定本地仓库的 setting.xml 文件
-
勾选 Local repository 后面的 Override,并指定本地仓库的地址
-
打开新项目配置重复上面的操作
-
创建maven项目
【File】【New】【Project】选择Maven
-
坐标
使用以下三个向量在maven仓库中唯一的确定一个maven工程
groupid:公司或者组织的域名倒序+当前项目名称
artifactid:当前项目模块名称
version:当前模块版本
-
第一次生成会下载一些项目需要的jar包,需要等待下载完成
-
下载速度慢 打开settings.xml文件
<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
-
pom.xml修改
-
jdk版本修改
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties>
-
删除pluginManagement标签
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> ... </pluginManagement>
加入fastjson包
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version> </dependency>
-
-
项目启动
-
方式一:jetty
<build><plugins><plugin><!--jerry插件--><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.25</version><configuration><!--热部署--><scanIntervalSeconds>10</scanIntervalSeconds><!--可指定当前项目的站点名--><contextPath>/myMaven</contextPath><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><!--设置启动的端口号--><port>8088</port></connector></connectors></configuration></plugin></plugins> </build>
-
这里可以写端口号进行配置,xml中的端口号要去掉
jetty:run -Djetty.port=8090
-
方式2 tomcat
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><!--启动端口--><port>8089</port><!--可指定当前项目的站点名--><path>/myMaven</path><!--修改编码格式--><uriEncoding>UTF-8</uriEncoding><!--服务器名称--><server>tomcat7</server></configuration> </plugin>
同上
tomcat7:run
-
3、仓库管理
-
本地仓库:为当前本机电脑上所有的maven工程服务
-
远程仓库
-
私服:架设在当前局域网环境下,为当前局域网范围内所有的maven工程服务
-
中央仓库:架设在internet上,为全世界所有的maven工程服务
-
中央仓库镜像:架设在各个大洲,为中央仓库分担流量,减轻中央仓库压力,同时更快的响应用户请求
-
4、构建
构建就是以我们编写的java代码、框架配置文件、国际化等其他资源文件、jsp页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目
-
clean 清理:删除以前的编译结果,为重新编译做好准备
-
compile 编译:将Java源程序编译为字节码文件
-
test 测试:针对项目中的关键点进行测试,确保项目在迭代开发中关键点的正确性
-
verify 报告:在每一次测试后以标准的格式记录和展示测试结果
-
package 打包:将一个包含诸多文件的工程封装成一个压缩文件用于安装或者部署。java工程对应jar包,web工程对应war包
-
放到tomcat中webapps使用
-
bin/start.bat启动
-
通过项目名称访问地址
-
-
install 安装:在Maven环境下特指将打包的结果,就是jar包或者war包安装到本地仓库中,供其他模块使用
-
deploy 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
5、Maven创建多模块项目
项目体量比较大的时候可以创建多模块项目,减少启动的时间
-
maven_parent 基模块
-
maven_common 工具模块
-
maven_user 用户模块
5.1创建maven_parent项目
1、创建项目 project
2、这一步什么都不选
3、和之前一样
5.2创建maven_common模块
1、选择模块Module Module Module
2、创建maven的java项目 quickstart
5.3创建maven_user模块
module创建的时候选择webapp即可
5.4修改配置并设置依赖关系
-
maven_common
-
设置包、类、方法
public class JDBCUtil {public static void getConnection(){System.out.println("获取连接");} }
-
-
maven_user
-
添加maven_common的依赖
<dependency><groupId>com.mashang</groupId><artifactId>maven_common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope> </dependency>
-
设置包、类、方法
public static void main(String[] args) {JDBCUtil.getConnection(); }
-
controller配置servlet
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope> </dependency>
-
parent添加tomcat
-
install parent
-
install 子模块
-
tomcat启动
-
-
6、依赖管理
-
安装依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version>
</dependency>
Maven中关键部分,我们使用maven主要就是使用它的依赖管理功能
-
坐标
groupld, artifactld, version :依赖的基本坐标, 对于任何一个依赖来说,基本坐标是最重要的,Maven是根据坐标才能找到需要的依赖。
-
依赖范围
<scope></scope>
-
compile
默认,表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常会包含进去
-
test
仅仅参与项目测试相关工作,打包时不会打包到项目中
-
provided
不参与打包,有容器提供(比如servlet相关api,已经有tomcat提供)
-
-
Exclusions
-
传递性依赖(简单了解即可)
传递依赖机制,让我们在使用某个jar的时候不去考虑他依赖了谁,maven会解析各个直接依赖的pom,将那些必要的间接依赖以传递性依赖的形式引入到当前项目中
传递依赖可能会产生冲突!!!!
冲突场景(不能模块间的依赖形成循环)
a依赖于b,b依赖于c,c依赖于a (1.0版本)
a下存在两个不同版本的c,则会冲突
使用exclusions配置,会自动选择适用的版本
<dependency><groupId>a</groupId><artifactId>a</artifactId><version>xxx</version><exclusions><groupId>c</groupId><artifactId>c</artifactId></exclusions></dependency>
7、小结
在本章中,你学习了什么是maven,maven的作用是什么,什么是仓库,如何使用maven来创建单个项目和多模块项目,多模块项目之间的关系管理,如何使用maven管理依赖,对于了解我们的真实开发又进了一步。