Maven基础
快速入门:
maven的介绍:是基于项目对象模型(POM),可以通过一小段信息来管理项目的构建,报告和文档的软件项目管理工具。
http://maven.apache.org/
/bin 包含mvn的运行脚本
/boot 包含类加载器的框架
/conf 是配置文件目录
/lib maven自身运行的类库
安装系统配置信息:
M2_HOME 安装路径
path ;%M2_HOME%/bin
项目目录结构:
src
-main(主要功能的源码包)
-java(.Java文件的目录)
-package
-resources(资源文件的目录)
-test(测试的源码包)
-java
-package
-resources
resources
target(class文件,报告等信息存储的地方)
pom.xml的配置:放在项目的根目录下(maven工程的描述文件)
<groupId> com.imooc.maven02 </groupId> groupId的值就是项目的包名 com.imooc.maven02
<artifactId> maven01-mode2 </artifactId> artifactId是模块名 maven01-mode2
<version> 0.0.1SNAPSHOT </version> 版本的信息 0.0.1SNAPSHOT
配置junit的文件
<dependencies>
<dependency>
坐标
<groupId>junit</groupId> groupId的值就是项目的包名 com.imooc.maven01
<artifactId>junit</artifactId> artifactId是模块名 maven01-model
<version>4.10</version> 版本的信息 0.0.1SNAPSHOT
</dependency>
<dependency> 引入maven01 jar包坐标到本地仓库
<groupId>junit</groupId> groupId的值就是项目的包名 com.imooc.maven01
<artifactId>junit</artifactId> artifactId是模块名 maven01-model
<version>4.10</version> 版本的信息 0.0.1SNAPSHOT
</dependency>
</dependencies>
maven常用命令:
mvn -v 查看maven的版本
compile 编译项目
test 测试
package 打包项目
clean 删除target编译生成的字节文件
install 安装jar包到本地仓库中 先进入maven01的根目录,执行install命令将jar文件本地仓库
archetype插件:用于创建符合maven规定的目录骨架
创建目录的两种方式:
命令符: mvn archetype:generate 按照提示进行选择
或者 mvn archetype:generate
-dgroup ID=组织名 公司网址的反写+项目名
-dartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包
maven中的坐标和仓库:
坐标
构件
仓库
本地仓库和远程仓库
镜像仓库 一般使用默认的中央仓库
在不能访问国外网的时候,在setting配置文件中145行<mirror>配置镜像文件
<mirror>
<id> maven.net.cn </id> 仓库的ID
<mirrorOf>central</mirrorOf> 为哪个仓库进行配置或使用*通配符
<name>central mirror in china</name>
<url>http://maven.net.cn/content/groups/public </url>
</mirror>
更改仓库的位置:默认存放在当前用户的根目录下 .m2>>rtepository>>
一般不放在c盘:
修改Settings 53行
<localRepository>存入你的放置路径</localRepository>
maven 的生命中周期和插件:
完整项目构建过程包括:清理;编译;测试;打包;集成测试;验证;部署。
maven 的生命中周期:
clean 清理项目 pre-clean clean post-clean
default 构建项目 compile test package install
site 生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
pom.xml常用元素介绍:
<project> </project>是pom的根元素,对pom做出一些限制
<modelVersion>4.0.0</modelVersion> 指定了当前pom的版本
<groupId >公司网址的反写+项目名</groupId> 当前主项目地址
<artifactId> 项目名+模块名 </artifactId> 实际项目名
<version> 0.0.1SNAPSHOT </version> 版本的信息<snapshot 快照 alpha 内部测试 beta 公测 release 稳定 GA 正式发布>
<packaging> </packaging> maven打包的方式,默认的是jar包 还有war(web的打包格式) zip pom
<name></name> 项目描述名
<url></url> 项目地址
<description></description> 项目的描述
<developers></developers> 开发人员的列表
<licenses></licenses> 许可证的信息,例如开源框架的许可证信息
<organization></organization> 组织
<dependencies> 依赖列表
<dependency> 依赖项
坐标
<groupId>junit</groupId> groupId的值就是项目的包名 com.imooc.maven01
<artifactId>junit</artifactId> artifactId是模块名 maven01-model
<version>4.10</version> 版本的信息 0.0.1SNAPSHOT
<type></type>
<scope></scope> 依赖范围
<optional></optional> true or false 设置依赖是否可选
<exclusions> 排除依赖传递列表
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖的管理--> 抽象父类模块共子模块使用,一般不用
<dependencyManagement>
<dependencies> 依赖列表
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins> 插件的列表
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<plugin>
<plugins>
</build>
<parent></parent> 通常用于在子模块中对父模块的pom的继承
<modules>聚合编译多个maven模块一起编译
<module>
</module>
<modules>
依赖的范围: maven中提供三种classpath: 编译 测试 运行
<scope>test </scope>
-compile 默认的范围,编译测试运行都有效
-provided 在编译和测试的时候有效 在运行的时候不会被加入
-runtime 在测试和运行时有效
-test 只在测试范围有效
-system 编译和测试有效 与本机系统相关联,可移植性差
-import 导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependecy的配置
表示从其他继承的pom中的依赖
依赖的传递: 通过引用父类项目的jar包,依赖父类。当引用的父类依赖了祖父类,
那么当前类又依赖了祖父类。也可以通过排除祖父类的依赖,达到断开依赖的传递
依赖的冲突:有A和B依赖了同一个构件但是不同版本,那么对于依赖了AB的C来说依赖了哪一个构建
依赖 原则: 短路优先 即优先解析依赖路径最短的版本
如果路径长度相同的话,则谁先声明,先解析谁。
聚合和继承:想将多个maven一起进行install到仓库中,可以通过聚合一次性执行该命令。
<packaging>pom</packaging>
<modules>聚合编译多个maven模块一起编译
<module>maven1路径</module>
<module>maven2路径</module>
<module>maven3路径</module>
<modules>
执行当前pom的install命令就完成所有maven*的install命令
继承:即多个maven使用同一个插件的时候,可以定义一个父类的pom,以供所有子类maven使用