王清松
Maven
概述
apache的开源项目,是项目管理工具,用于管理java项目
组成
项目对象模型(Project Object Model)
每个maven工程中都有一个pom.xml文件,用于定义工程所依赖的jar包、本工程的坐标、打包运行方式
依赖管理系统
maven通过坐标对项目工程所依赖的jar包统一规范管理
maven定义了一套项目生命周期
清理
初始化
编译
测试
报告
打包
部署
站点生成
一组标准集合
强调:maven工程有自己标准的工程目标结构、定义坐标有标准
maven管理项目生命周期过程都是基于插件完成的
仓库
中央仓库
远程仓库,仓库中的jar由maven团队统一维护
http://repo1.maven.org/maven2/
本地仓库
相当于缓存,工程第一次会从远程仓库下载jar包,将jar包存在本地仓库
私服
相当于一个代理仓库,本地仓库向私服请求资源,私服有就直接返回资源,如果没有就去中央仓库请求资源,然后下载后返回给本地仓库
环境搭建
到maven官网下载http://maven.apache.org/download.cgi
配置本地仓库
找到apache-maven-3.3.9\conf\settings.xml
在<settings>标签下配置本地仓库所在路径
<localRepository>D:\develop\maven_local_repository</localRepository>
eclipse配置maven
配置maven安装目录
【Window】-【Preferences】-【Maven】-【Installations】
【Add...】,在Installation home配置maven路径即可
配置User Settings
【Window】-【Preferences】-【Maven】-【User Settings】
在User Settings配置apache-maven-3.3.9\conf\settings.xml
依次点击Update Settings-Reindex-Apply
重建本地仓库索引
【Window】-【Show View】-【Other...】-【Maven】-【Maven Repositories】
【Local Repositories】-【Local Repository(...)】,右键,Rebuild Index
设置编译版本
【右键】-【Maven】-【Add Plugin】
搜索compiler,选择版本,并作一定补充后,Update Project...
————————————————————————————
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
配置环境变量
变量名:MAVEN_HOME
变量值:Maven根目录路径
变量名:PATH
变量值:%MAVEN_HOME%\bin
变量名:M2_HOME
变量值:Maven根目录路径
项目生命周期
分类
clean清理项目
pre-clean
clean
post-clean
default构建项目(核心)
...
validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile编译源代码
...
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test单元测试运行测试代码
...
prepare-package
package将编译好的代码打包
...
pre-integration-test
integration-test
post-integration-test
verify
install安装到本地Maven库
...
deploy
site生成项目站点
pre-site
site
post-site
site-deploy
注意:三套生命周期相互独立,后面的阶段依赖于前面的阶段
常见命令
compile编译(生成target目录并存放编译好的class文件)
clean清理(清理target目录下的class文件)
test执行单元测试类
package打包
install将工程的jar发布到本地仓库
项目搭建
1.建立一个父项目名称为xxx_parent(打包方式为pom),将所需要的所有依赖都配置在该项目的pom中
2.建立子项目xxx_dao\service\entity(打包方式为jar)....继承xxx_parent
3.建立子项目xxx_web(打包方式为war)....继承xxx_parent
4.给子项目添加依赖,action依赖service,service依赖dao,dao依赖entity
5.拆分配置文件
事务管理在service层,即xxx_service项目中,打包后会在该jar包中
数据源相关在dao层,即xxx_dao项目中,打包后会在该jar包中
注意!此时配置文件分布于多个项目,想要同时读取需要修改在web.xml中声明applicationContext.xml位置的参数信息
在classpath后添加一个*
———————————
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
依赖
依赖范围
用于控制依赖与3种classpath的关系
编译classpath
测试classpath
运行classpath
compile
默认值,编译有效、测试有效、运行有效
如spring-core
test
编译无效、测试有效、运行无效
如JUnit
provided
编译有效、测试有效、运行无效
如servlet API
runtime
编译无效、测试有效、运行有效
如JDBC驱动包
依赖传递
关系:a依赖b,b依赖c
1.a编译如果需要b,b编译如果需要c,则a编译需要c
2.a测试、运行如果需要b,b运行需要c,则a测试、运行需要c
3.根据1.2推断,a编译是否需要c,a测试是否需要c,a运行是否需要c
4.与4种依赖范围进行匹配推断a对c的依赖传递
依赖调节
原则一:路径优先,依赖路径浅的优先
原则二:声明优先,依赖路径深度相等,声明在前的被引用
核心配置文件pom.xml
版本锁定
<dependencyManagement>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version>
</dependency>
</dependencyManagement>
优先级
<dependencies>-<dependency>-<version>高
<dependencyManagement>-<dependency>-<version>低
依赖排除
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency> |