目录
1、Maven介绍
1.1、什么是Maven
1.2、Maven能解决什么问题
2、Maven的安装
3、Maven仓库
3.1、Maven仓库的分类
3.2、Maven本地仓库的配置
4、Maven工程的目录结构
5、Maven命令
5.1、Maven常用命令
5.1.1、compile命令
5.1.2、clean命令
5.1.3、package命令
5.1.4、install命令
5.2、Maven指令的生命周期
6、Maven的概念模型
7、Maven坐标
8、IDEA开发Maven项目
8.1、IDEA的Maven配置
8.2、IDEA创建Maven的Java项目(方式1:不使用骨架)
8.3、IDEA创建Maven的Java项目(方式2:使用骨架)
8.4、使用依赖导入jar包
8.5、IDEA创建Maven的JavaWeb项目(不使用骨架)
8.6、使用Tomcat插件启动web项目
8.7、编写Servlet-依赖范围配置
8.7.1、依赖范围详解
9、分模块开发与设计
9.1、分模块开发步骤
10、依赖管理
10.1、依赖添加
10.2、依赖传递
11、继承与聚合
11.1、聚合工程开发
11.2、继承工程开发
11.2.1、继承开发步骤
11.3、聚合与继承的区别
12、属性
12.1、属性配置与使用
12.2、资源文件引用属性
12.3、其他属性(了解)
12.4、版本管理
13、多环境配置与应用
13.1、多环境开发
13.2、跳过测试
14、私服
Maven在美国是一个口语化的词语,代表专家、内行的意思。一个对Maven比较正式的定义是这么说的:Maven是一个项目管理工具,它包含了一个项目对象模型(POM,Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
可以用更通俗的方式来说明,我们直到,项目开发不仅仅是写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:
试想,如果现在有一种工具,可以把你从上面地繁琐工作中解放出来,能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成Web站点,你会心动吗?Maven就可以解决上面所提到的这些问题。
下载地址:Maven – Download Apache Maven
下载解压后,配置环境变量,依次点击 此电脑 -> 属性 -> 高级 -> 环境变量 -> 在系统变量栏下点击新建 -> 变量名为 MAVEN_HOME ,变量值为:D:\apache-maven-3.8.4 -> 确定 -> 在系统变量栏中找到 Path 并选中 -> 编辑 -> 新建 -> 输入 %MAVEN_HOME%\bin -> 依次点击确定即可。
检查是否安装成功:在cmd中输入:mvn -v ,如果出现Maven相关信息,则说明安装成功。
maven的工作需要从仓库下载一些jar包,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并保存在本地仓库,本地仓库,就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。默认本地仓库位置在 ${user.dir}/.m2/responsitory,${user.dir}表示windows用户目录。
远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网也可以在局域网内。
中央仓库:在maven软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构建。
conf目录下的settings.xml:
..
D:/apache-maven-3.8.4/mvn_repository
..
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
..
项目的根目录下:
.settings目录:工具生成的文件
src目录:源代码(必备)
main目录:主工程代码
java:放入项目的源码
resources:放入配置文件
webapp:web项目的资源目录(jsp/html/WEB-INF)
test目录:测试代码
java:测试的源码
resources:测试的配置文件
target目录:编译生成的文件
.classpath文件
.project文件
.tern-project文件
pom.xml文件:maven工程的核心配置文件,如坐标信息。(必备)
compile是maven工程的编译命令,作用是将 src/main/java 下的文件编译为class文件输出到target目录下。
cmd中执行 mvn compile 。
删除target目录。
将项目安装到本地仓库中。
maven对项目构建过程分为三套相互独立的生命周期,这三套生命周期分别是:
同一套生命周期中,执行后边的操作,会自动执行前边的所有操作。
Maven包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
坐标:被Maven管理的资源的唯一标识。
一个坐标由以下组成:
打开IDEA -> File -> Settings 配置 Maven:
最后点击ok即可。
打开IDEA,依次点击File -> New -> Project。
注:在test目录下创建resources资源文件夹方法:在test目录下创建一个resources文件夹,然后对该文件夹右键 -> Mark Directory as -> Test Resources Root 即可。
pom.xml :
4.0.0
com.clp
MavenProject
1.0-SNAPSHOT
jar
8
8
打开IDEA,依次点击File -> New -> Project。
后面的设置参照不使用骨架情形即可。
初次使用骨架会进行一系列下载,等待下载完成即可。(出现BUILD SUCCESS说明成功完成)。
pom.xml
4.0.0
com.clp
MavenProject
1.0-SNAPSHOT
jar
org.apache.maven.plugins
maven-compile-plugin
3.1
1.8
8
8
打开IDEA,依次点击 File -> New -> Project 。
设置pom的内容:
...
com.clp
MevenWeb
1.0-SNAPSHOT
war
...
然后在main目录下创建webapp目录和index.jsp,在webapp目录下创建WEB-INF目录和web.xml文件。
下载 tomcat 7.0.92 。
在pom.xml中加入:
...
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
80
/MevenWeb
...
点开右侧的maven侧边栏,找到所在项目,再找到Plugins一栏,找到tomcat7,并双击该项下的tomcat7-run。
注意:通过配置方式启动tomcat方法:依次点击 Run -> Edit Configurations -> 点击+号 -> Maven:
在pom.xml中添加:
...
javax.servlet
javax.servlet-api
3.1.0
provided
...
A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
在MavenWeb工程中测试各种scope,测试总结:
依赖范围由强到弱的顺序是:compile > provided > runtime > test 。
步骤:
依赖指当前项目运行所需的jar包,一个项目可以设置多个依赖。格式:
pom.xml:
...
org.springframework
spring-webmvc
5.2.10.RELEASE
...
依赖具有传递性:
依赖传递的冲突问题:
可选依赖:指对外隐藏当前所依赖的资源——不透明。
pom.xml:
...
com.clp
module_pojo
1.0-SNAPSHOT
true
...
排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本——不需要。排除依赖只需指定groupId和artifactId即可。
pom.xml:
...
com.clp
module_pojo
1.0-SNAPSHOT
log4j
log4j
...
聚合:将多个模块组织成一个整体,同时进行项目构建的过程。
聚合工程:通常是一个不具有业务功能的“空”工程(有且仅有一个.pom文件)。
作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建。
当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。
步骤:
pom.xml:
4.0.0
com.clp
module
1.0-SNAPSHOT
pom
../module_dao
../module_pojo
../module_ssm
继承:继承描述的是两个工程之间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
作用:① 简化配置;② 减少版本冲突。
pom.xml
...
com.clp
module
1.0-SNAPSHOT
pom
...
父工程的pom.xml:
...
org.springframework
spring-webmvc
5.2.10.RELEASE
...
junit
junit
4.12
test
...
子工程的pom.xml:
...
com.clp
module
1.0-SNAPSHOT
../module/pom.xml
...
junit
junit
test
...
作用:聚合用于快速构建项目,继承用于快速配置。
相同点:
不同点:
步骤:
pom.xml:
...
5.2.10.RELEASE
4.12
1.3.0
...
pom.xml:
...
org.springframework
spring-webmvc
${spring.version}
...
步骤:
pom.xml:
...
jdbc:mysql://127.0.0.1:3306/ssmdb
...
jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
pom.xml:
...
${project.basedir}/src/main/resources
true
...
pom.xml:
...
org.apache.maven.plugins
maven-war-plugin
3.2.3
false
...
属性分类 | 引用格式 | 示例 |
---|---|---|
自定义属性 | ${自定义属性名} | ${spring.version} |
内置属性 | ${内置属性名} | ${basedir} 、${version} |
Setting属性 | ${setting.属性名} | ${settings.localRepository} |
Java系统属性 | ${系统属性分类.系统属性名} | ${user.home} |
环境变量属性 | ${env.环境变量属性名} | ${env.JAVA_HOME} |
工程版本:
发布版本:① alpha版;② beta版;③ 纯数字版。
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境。
步骤:
pom.xml:
...
env_dev
jdbc:mysql://127.0.0.1:3306/ssmdb
true
env_pro
jdbc:mysql://127.0.0.2:3306/ssmdb
env_test
jdbc:mysql://127.0.0.3:3306/ssmdb
...
mvn 指令 -P 环境定义id
例如:mvn install -P pro_env
应用场景:
配置:
pom.xml:
细粒度控制跳过测试:
...
maven-surefire-plugin
2.22.2
false
**/User*Test.java
**/BookServiceTest.java
...
- 跳过测试
mvn 指令 -D skipTests
范例:mvn install -D skipTests
注意:执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步的问题。
Nexus是Sonatype公司的一款maven私服产品,下载地址:https://help.sonatype.com/repomanager3/download 。