用了maven有一小段时间了,挺不错的项目代码构建和管理工具,结合之前看网上公开课的笔记、还有其他网络资料,在这里做简单记录。
一、maven介绍、安装
1、maven基于项目对象模型(POM),来管理项目的构建、报告和文档,覆盖项目的生命周期,包括编译、测试、运行、清理、打包和部署;有效解决了jar的引入和依赖等管理。
2、maven的安装比较简单,下载后解压,并配置M2_HOME和PATH就可以通过maven -v查看maven版本了。在Eclipse中可以安装m2eclipse插件更为方便地使用maven。
二、maven项目结构、常见命令
1、普通maven项目结构如下:
src
-main
-java
-package(主代码)
-test
-java
-package(主代码)
-resources -java
2、常用的命令有:
mvn –v 查看版本
mvn complie 编译源代码
mvn test 测试
mvn package 打包
mvn clean 删除生成的target目录
mvn install 安装jar包到本地仓库
3、自动创建目录骨架--archetype插件 两种方式
(1)mvn archetype:generate 按照提示进行选择
(2)mvn archetype:generate –DgroupId=组织名(公司网址反写+项目名) -DDartifactId=(项目名-模块名) -Dversion=版本号 -Dpackage=代码所在的包
三、核心概念
1、概念
坐标 构件构件通过坐标作为其唯一标识
仓库(本地仓库、远程仓库)
镜像仓库(可在setting.xml里设置mirror,设置之后不直接访问本地仓库而是访问镜像仓库)
更改仓库位置(setting.xml设置local路径)
2、生命周期maven的生命周期包括清理、编译、测试、package打包、集成测试、验证、部署等。
有clean清理项目、default构建项目、site生成项目站点等三种操作:
(1)clean清理项目
pre-clean:执行清理前的工作 、 clean:清理上一次构建生成的所有文件 、post-clean:执行清理后的文件
(2)default构建项目(最核心)
compile、test、package、install
(3)site生成项目站点,根据pom信息生成站点
pre-site生成站点前要完成的工作 、site生成项目的站点文档、post-site在生成项目站点后要完成的工作、site-deploy发布生成的站点到服务器上
3、pom.xml解析
<project>
<modelVersion>指定pom版本
<groupId>反写的公司网址+项目名
<artifactId>项目名+模块名
<version>版本号
第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号
0.0.1snapshot快照
alpha内部测试
beta公测
release稳定
ga正式发布
<packaging>打包方式,默认jar,war、zip和pom也可以指定
<dependencies>依赖列表
<dependency></dependency>
</dependencies>
<groupId>/<artifactId>/<version>/<type>/<scope>/<optional>(设置依赖是否可选,true则必须显式引入)/<exclusions>/<exclusion>
<dependencyManagement>依赖管理
<dependencies><dependency>不会运行,,用于定义父模块,供子模块继承
<build>构建方式
<plugins>插件列表
<parent>指定父模块
<modules>指定多个子模块一起编译
三种classpath:编译、测试、运行
compile默认,对三种classpath都有效
provided测试和编译有效,最后运行不会加入。。如servlet
runtime在测试和运行时有效。。如jdbc
test在测试时有效。。如junit
system编译和测试有效,,跟系统相关联,可移植性差
import导入依赖范围,,只使用在dependencyManagemant中表示从其他的pom中导入dependency的配置
5、依赖传递 、依赖冲突
A->B->C,需要在B中引入C的快照(其中C必须经过打包并安装到本地仓库,否则会找不到相应的包;在A中引入B快照也类似,A引入B后会间接引入C的快照,要排除C的话用exclusion来设定)
依赖冲突 (引入的是哪个版本的依赖)
(1)短路优先,路径短的优先解析
A->B->C->X
A->D->X
(2)先声明先优先
路径长度相同,则谁先声明,先解析谁
6、聚合和继承
聚合用于多个模块的install
pom中 package设置为pom
继承
使用共同的依赖,如junit
将共同的依赖抽象成一个父类
pom中的dependencyManagemant
四、maven打包过程遇到的问题和解决方式
1、打包后,pom.xml引用的jar包缺失
通过maven-assembly-plugin插件和jars-with-dependencies.xml将依赖的jar包一起打包
2、开发、测试和生产不同环境下的打包
使用 profile 和filtering 实现多种环境下的资源配置管理
(指定默认激活的profile、过滤器和资源所在目录)mvn packge -Pid (id为test、prod等)
3、配置文件动态修改,而不用反复重新打包
要实现这种效果,需要先加载特定路径下的配置文件,如果没有该路径或没有配置文件再加载jar包中的配置文件。这可通过commons configuration配置文件包来实现。通过在配置文件夹下新建配置文件进行覆盖加载,便可以覆盖掉jar包中同名的配置文件,实现动态改变·配置无需重新打包。
暂时记录如上,后续有待补充。