maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
mvn安装目录下各个目录的功能
--bin 目录是包含了mvn运行的脚本
--boot 包含了类加载器框架,maven使用该类加载器加载自己的类库
--config包含一些配置文件
--lib 包含maven运行时所用到的类库文件
配置maven环境变量
略
创建目录
目录结构
src
-main
-java
-package
-test
-java
-package
resources
mvn常用命令
mvn -v是查看maven版本号
mvn compile编译
mvn test运行测试用例
mvn clean删除target文件夹
mvn install安装jar包到本地仓库
maven自动生成模板
mvn archetype:generate
根据提示填写相应信息即可,或者使用如下语句直接创建
mvn archetype:generate -DgroupId=公司网址反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所在包名
Maven坐标和构件
groupId+artifact+版本号
构成了maven的坐标
建议:在创建项目时,groupId应该和包名相一致
仓库
用来管理项目依赖
分为:
- 本地仓库
- 远程仓库
镜像仓库
修改镜像仓库:
在maven安装目录下找到conf目录下的setting.xml
修改其中的<mirror>标签,修改该仓库下的url即可
如常用的阿里云的镜像,可以修改为:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
更改仓库默认路径
依然是修改conf目录下的setting.xml文件中的标签,如修改为:
E:/maven_repo/repo
Eclipse中设置maven
Window-->Preferences-->Maven-->User Settings-->设置Globle Settings找到maven安装目录下的setting.xml文件即可
Maven项目的生命周期
完整项目构建过程:
清理-->编译-->测试-->打包-->集成测试-->验证-->部署
常用命令
clean 清理项目
pre-clean:执行清理前的工作
clean:清理上一次构建生成的所有文件
post-clean:执行清理后的文件
default 构建项目(最核心)
常用:compile(编译),test(测试),package(打包),install(安装)
site 生成项目站点
用来生成项目站点
pre-site:生成项目站点前要完成的工作
site:生成项目站点文档
post-site:在生成项目站点后要完成的工作
site-deploy:发布生成的站点到服务器上
对于生命阶段而言,执行后面的阶段,前面的阶段会依次顺序执行
POM常用元素
<modelVersion>4.0.0</modelVersion> 指定了当前pom的版本
<groupId>一般与包名相同:反写公司网址+项目名</groupId> 主项目标识
<artifactId>项目名+模块名</artifactId> 模块标识
<version>0.0.1-SNAPSHOT</version>当前项目版本号,第一个数字表示大版本号,第二个数字表示分支版本号,第三个数字表示小版本号
snapshot为快照版,alpha内测版本,beta公测版本,release稳定版本,GA正式版本
<packaging>jar</packaging>打包方式 除jar之外还有war,zip,pom
<name>hi</name>描述标签,在产生项目文档时使用
<url>http://maven.apache.org</url>项目的地址以
<description></description>项目的描述
<developers></developers>开发人员列表
<licenses></licenses>许可证信息
<organization></organization>组织信息
<dependencies></dependencies>依赖列表
<dependency></dependency> 依赖项
<groupId></groupId>依赖项的项目名
<artifactId></artifactId>依赖项的模块名
<version></version>依赖项的版本号
<scope></scope>依赖项的作用范围
<type></type>依赖项的类别
<optional></optional>设置依赖是否可选,默认为false,默认情况下,子项目继承该依赖,否则为true的情况下必须显式依赖该项目
<exclusions></exclusions>排除依赖传递列表
<exclusion></exclusion>排除的依赖项
<dependencyManagement></dependencyManagement>依赖管理,可以在其中定义依赖列表,但是不会将依赖的包引入。主要用于在父模块中供子模块继承使用
<build></build>为构建提供相应的支持
<plugins></plugins>插件列表
<plugin></plugin>具体的插件,plugin也需要指出标签
<parent></parent>通常用于在子模块中对父模块的继承
<modules></modules>用来聚合模块
依赖的范围
用来控制依赖与三种classpath之间的关系
有编译,测试和运行三个阶段,根据三种阶段分为了以下几种
compile:默认级别,对于编译测试运行都有效
provided:编译和测试时有效,运行时候不会被加入,如servlet
runtime:测试和运行时有效,如jdbc驱动
test:只在测试时有效,如junit
system:和provided一样是只可以在编译和测试有效,但是对系统有较强的依赖,可移植性差
import:导入的依赖范围,只使用在dependencyManagement中,表示从其他的pom引入dependency配置
依赖的传递
A依赖B,B依赖C,则A依赖C
排除依赖:使用exclusions标签,包含exclusion标签,其中包含坐标
在settings.xml中指定jdk的版本
依赖冲突
当A和B依赖不同版本时候
规则:短路优先
如A依赖B,B依赖C,C依赖X.jar
A依赖D,D依赖X.jar
会优先选用路径最短的,即A会依赖D包含的X.jar的版本
当路径长度相同时
规则:顺序优先
聚合和继承
聚合:
使用包含其中包含坐标
继承:
父依赖可以传递给子依赖
使用parent标签,包含父POM的坐标即可将父POM的引入