Maven总结
Maven的定义
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
1.依赖管理
2.生命周期管理
3.仓库管理(中心仓库、私服、其他公共库)
Maven模型概念
Maven安装
要点:1.安装目录下的conf:含有settings.xml配置文件
2.localRepository是定义本地仓库的地址
Maven约定
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
src/test/java —— 存放所有测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置
pom.xml——maven项目核心配置文件
Maven坐标
Maven坐标主要组成
groupId:定义当前Maven项目隶属项目
artifactId:定义实际项目中的一个模块
version:定义当前项目的当前版本
packaging:定义该项目的打包方式
Maven常用命令
mvn compile命令
执行完毕后,生成了maven工程编译完成后字节码文件的生成目录target
mvn clean命令
执行完毕后,字节码生成目录被删除
mvn clean test命令
执行完毕后,字节码生成目录中生成了被测试类与测试类的编译字节码和测试执行过程日志与详细报告
mvn clean compile命令
组合指令,先执行clean,再执行compile,通常应用于上线前执行,清除测试类
mvn clean test命令
组合指令,先执行clean,再执行test,通常应用于测试环节
mvn clean package命令
组合指令,先执行clean,再执行package,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
mvn clean install
查看仓库,当前项目被发布到仓库中。
组合指令,先执行clean,再执行install,将项目打包,通常应用于发布前执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
部署————将打好的包发布到资源仓库中
Maven依赖管理
依赖声明主要包含如下元素:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动
传递性依赖和可选依赖,排除依赖
是否向下传递
<optional> true/false </optional>
所包含坐标排除依赖包中所包含的依赖关系不需要添加版本,直接类别排除
<exclusions><exclusion>
Maven生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一
包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤
Maven三大生命周期
1.clean:清理项目的
2.default:构建项目的
3.site:生成项目站点的
Maven的生命周期管理
继承关系
继承为了消除重复,我们把很多相同的配置提取出来
例如:grouptId,version等
父工程设置为被继承
<packaging>pom</packaging>
子工程继承父工程
省略父工程中定义的坐标除访问名称中的所有设定,添加继承父工程
<parent>
<groupId>…</groupId>
<artifactId>… </artifactId>
<version>… </version>
<relativePath>../父工程项目名</relativePath>
</parent>
父工程统一管理子工程依赖版本
<dependencyManagement>
<dependencies>
//添加公共依赖包
</dependencies>
</dependencyManagement>
子工程仅仅添加依赖包,无需添加版本,版本由父工程继承而来
为了进一步便于管理,将所有的版本管理设置在一起,设置为系统属性值
<properties>
<junit.version>4.9</junit.version>
……
</properties>
引用使用${junit.version}格式进行,只能在依赖范围设置。
父工程统一管理子工程依赖关系
如果所有子工程都需要依赖某些包,父工程可以通过设置依赖,将依赖关系传递到子工程中
<dependencies>
//添加公共依赖包
</dependencies>
聚合
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合
<modules>
<module>../子项目名称1</module>
<module>../子项目名称2</module>
<module>../子项目名称3</module>
</modules>
Eclipse创建maven工程
1.新建Maven项目
2.使用Archetype骨架
3.修改新建项目下的configxml文件中的工程环境定义
4.重启Eclipse
5.修改项目的properties,如JDK/encoding等
pom.xml文件详解
- groupId 公司名称
- artifactId 项目名
- version 版本号(Version命名规则)
- properties 属性
在maven编译的时候发挥作用
eg:指定一些数据库的连接信息
还可以自定义标签,统一管理jar的版本
eg:
<properties>
<log4j.version>1.2.9</log4j.version
</properties>
相当于定义了一个常数,可以使用${log4j.version}来调用这个常数
- dependencies 依赖
- name / url 生成站点时的信息
- parent 父pom
- build 编译等设置
- dependencyManagement
用于定义共同依赖的jar包,用于其他项目继承时使用的是同一个版本的jar包
Maven项目搭建
创建聚合模块
new maven project –>skip archetype selection–>Maven坐标–>编辑pom文件:<packaging>pom<packaging>
–>设置encoding UTF-8 以及jdk等
创建模块
new maven module –>archetype selection–>Maven坐标–>编辑pom文件:去除<groupId>
以及<version>
–>去除jsp文件–>设置encoding UTF-8 以及jdk等–><dependencies>
内设置对其他模块的依赖