- Maven简介
Maven是Apache下的开源项目,项目管理工具,管理Java项目。
1.1. 项目对象模型(Project Object Model)
POM对象模型, 每个maven工程中都有一个pom.xml文件, 定义工程所依赖的jar包、本工程的坐标、打包运行方式。
1.2. 依赖管理系统(基础核心)
maven通过坐标对项目工程所依赖的jar包统一规范管理
1.3. maven定义一套项目的生命周期
清理、初始化、编译、测试、报告、打包、部署、站点生成
1.4. maven管理项目生命周期过程都是基于插件完成的
1.5. 一组标准集合
强调:maven工程有自己标准的工作目录结构、定义坐标有标准 - Maven 仓库
2.1. 中央仓库
包含日常开发所常用的jar包,有专业团队(maven团队)统一维护。
中央仓库地址:http://repo1.maven.org/maven2/
2.2. 本地仓库
相当于缓存,工程第一次会从远程仓库(互联网)去下载jar包,将jar包存在本地仓库,第二次不需要从远程仓库下载,先从本地仓库找,如果找不到才会去远程仓库查找。
2.3. 私服 - Maven环境搭建
3.1. Maven下载
http://maven.apache.org/download.cgi
3.2. 配置本地仓库
打开maven的安装目录中conf/setting.xml文件,配置D:\apache-maven-3.5.4\local_repository - eclipse(IntelliJ IDEA)配置maven
4.1. 配置安装目录
Window --> Preferences --> Maven --> Installations --> add 添加maven的安装目录位置
4.2. 配置配置文件
Window --> Preferences --> Maven --> User Settings --> Browse添加配置文件路径
4.3. 显示Maven Repositories
Window --> Show View --> Other --> Maven --> Maven Repositories
4.4. 重建Maven Repositories 索引
选中 Local Repository 右键 --> Rebuild Index - 创建一个Maven工程
5.1. 创建Maven工程–> 勾选Create a simple project (skip archetype selection) --> 填写工程坐标 --> finish
5.2. 工程坐标包括
Group Id : 项目的名称, 项目的名称以域名倒序,比如: cn.xiaofan.mavendemo
Arficatc Id : 模块名称(子项目名称)
Version : 模块的版本, snapshot(快照版,没有正式发行)release(正式发行版本) - 设置编译版本
6.1. Maven 工程默认是JDK1.5, 需要将编译版本进行修改
6.2. 配置信息:
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
1.8
6.3. 对项目进行刷新 Alt + F5 - 添加依赖
7.1. 向导模式(本地仓库有相应的Jar包)
右键工程 选Maven --> Add Dependency --> 搜索相应的依赖(前提是对本地仓库重建索引, 否则无法自动查询)
7.2. 通过在Nexus Repository Manager 中搜索,然后添加到pom.xml文件中
链接:https://repository.sonatype.org - 项目生命周期(了解)
Maven 有三套相互独立的生命周期, 分别是: clean、default、site。生命周期的每一个活动都对应着maven中的一条命令。
8.1. clean 周期
pre-clean: 准备清理
clean:真正的清理工作
post-clean: 执行清理后的一些后续工作
8.2. default 周期
…
compile: 编译源代码
…
test:单元测试运行测试代码
package:将编译好的代码打包成为jar或者war或者ear等等
…
install:安装到本地maven仓库
…
8.3. site 周期
pre-site: 准备生成站点
site:生成站点及文档
post-site:站点收尾
site-deploy:将生成的站点发布到服务器上 - eclipse中命令使用
compile : 点击工程右键 --> run as --> Maven build… --> Goals中输入compile --> run
clean : 点击工程右键 --> run as --> Maven clean
test : 执行单元测试类, 执行src/test/java下的类
package : 点击工程右键 --> run as --> Maven build… --> Goals中输入package --> run
install : 将工程的jar发布到本地仓库 点击工程右键 --> run as --> Maven install - maven原生命令
mvn 命令名称 运行不调试
mvnDebug 命令名称 调试运行
前提:需要配置maven环境变量
MAVEN_HOME D:\apache-maven-3.5.4
PATH %MAVEN_HOME%\bin - 关于Maven项目build时出现No compiler is provided in this environment的处理
链接:https://blog.csdn.net/lslk9898/article/details/73836745
12 创建SSH2工程(*****)
12.1. 创建war工程
12.1.1. 在创建普通maven工程的基础上packaging类型选war,并且web.xml需要手动添加(先创建WEB-INF,在这下面创建web.xml)
12.1.2. 添加编译插件,设置编译版本,参照6
12.1.3. 添加tomcat插件,配置端口和路径
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
12.1.4. 添加一个jsp文件,配置web.xml
12.1.5. 运行web服务器,并在客户端访问
点击工程右键 --> run as --> Maven build… --> Goals中输入tomcat7:run --> run
12.1.6. 在pom.xml中配置servlet-api
因为我们创建的是war工程,需要response和request等对象,而这些对象都在servlet-api中,所以只有添加servlet-api,才能正常编译通过
javax.servlet
servlet-api
2.5
provided
注意:因为tomcat插件本身会提供servlet-api插件,所以要添加这个provided 依赖范围,防止打包冲突
12.1.7. 打war包(参照9)
12.2. 添加依赖,定义变量,抽取相应的版本
4.0.0
cn.xiaofan.mavendemo
parent
0.0.1-SNAPSHOT
b
c中的pom.xml
4.0.0
cn.xiaofan.mavendemo
c
0.0.1-SNAPSHOT
- 构建多模块的Maven工程(*****)
Maven多模块项目,使用与一些比较大的项目, 通过合理的模块拆分,实现代码的复用,便于维护和管理。 尤其是一些开源框架, 也是采用多模块的方式, 提供插件集成, 用户可以根据需要配置置顶的模块。
14.1. 拆分规则
14.1.1. 按照业务模块进行拆分 (企业资源计划即 ERP (Enterprise Resource Planning))
父工程 --> 通用的配置
基本信息模块
进销存模块
人事管理模块
财务管理模块
CRM模块
14.1.2. 按层进行划分
父工程 --> 通用的配置
web层
业务逻辑层
数据访问层
实体类
注意: 1.对于比较超大的项目可以考虑二者集合
2.对于父模块,一般packaging类型都选pom, 子模块一般packaging类型选择jar, war
14.2. 模块之间的依赖具有传递性
14.3. 配置文件的拆分,只需要在web.xml中配置applicationContext* 就可以找到!
14.4. tomcat7:run 运行
14.5. 打包 package(运行,打包都选父工程) - 依赖管理
15.1. 依赖范围
依赖范围是用来控制依赖与3种classpath(编译classpath, 测试classpath, 运行classpath)的关系
依赖范围 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile Y Y Y spring-core
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
注:
-
compile 编译、测试、运行, A在编译时依赖B, 并且在测试和运行时也依赖。strus-core、 spring-beans 打到war包或jar包里
-
test 只在测试阶段有效,不会打到war包或者jar包里面 junit
-
provided 编译、和测试有效,A在编译和测试时需要B.比如:servlet-api就是编译和测试有用, 在运行时不用(tomcat容器已经提供)不会打到war包
-
测试运行有效。比如jdbc驱动包
15.2. 传递依赖规则
直接依赖(A依赖B)\ 传递依赖(B依赖C) compile provided runtime test
compile compile - runtime -
provided provided provided provided -
runtime runtime - runtime -
test test - test -
注:纵坐标代表A依赖B, 横坐标代表B依赖C, 其他代表A和C的依赖关系,-代表没有依赖关系。
15.3. 依赖调解原则
a . A --> B --> C(v1)
b. A --> D --> E --> C(v2)
c. A --> D --> C(v3)
第一原则:路径优先,短的路径会被依赖(a, b, 两种路径,A最终会依赖C(v1)版本)
第二原则:声明优先,路径深度相同的前提下,声明在前的会被引用C(v1) -
版本锁定
在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器
pom.xml文件中, jar的版本判断的两种途径 -
如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过声明,如果有,就集它,如果没有就报错,告诉你必须为dependency声明一个version
-
如果dependencies中的dependency声明了version,那么无论denpendencyManagement中有误对该jar的version声明,都以denpendency里的为准。
-
排除依赖(版本就高不就低)
org.apache.struts
struts2-core
${struts.version}
javassist
javassist
-
单元测试
18.1. 依赖junit
junit
junit
4.11
test
18.2. 编写测试类
public class TestErpDao {@Test
public void testErpDao() {
System.out.println(“测试Junit”);
}
}