前言
今天就来聊聊Maven的基础和一些比较概念性的东西,还有一些常用的Maven命令啥的,主要是某人脑子记不住,记在博客中让她自己看吧,省的费心给她找。
后续的文章会聊到Maven的一些比较高级用法,像自定义插件,私服啥的,欢迎各位大佬来讨论哦!
概念
Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。
Maven 的主要目的是为开发者提供
- 一个可复用、可维护、更易理解的工程综合模型
- 与这个模型交互的插件或者工具
Maven 工程结构和内容被定义在一个 xml 文件中(即谈到的pom.xml)
安装配置
Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
官网下载后解压即可,一般都是在开发工具里面配置Maven的位置就可以了,如果喜欢敲命令的话,那就添加一下环境变量。
然后配置一下本地仓库地址和镜像仓库,提供一下示例:
maven下载地址:Maven – Download Apache Maven
JDK原生打包
在Maven工具出现之前,基本上用的都是Ant(打包构建项目工具)打包,由于现在Maven越来越流行,使用Ant打包的项目就越来越少了,这些工具基本上都是通过对JDK原生打包的方式进行了一层封装,编译打包底层还是基于JDK带有的工具实现的。
现有一个demo测试项目,结构路径如下:
我们进入到这个src的目录里面,使用命令进行编译:
编译好后就可以进行打包成jar包文件了,jar文件又分为两种,一种是直接被引用的jar包,另外一种是可以直接执行的可执行jar包,打包命令如下:
这时打的包仅是一个普通的jar包,如果要打成可执行包的话,那么就得引用一个MANIFEST.MF文件了,JDK也是根据这个文件加载相关的类信息的,新建一个manifest.txt文件,内容如下(每个冒号后面都需要有空格,每行都需换行)
Manifest-Version: 1.0
Created-By: 1.8.0_101 (Oracle Corporation)
Main-Class: com.compile.App
执行一下命令
这样打出来的jar包就是可执行包啦。使用以下命令启动jar包
java -jar compile.jar
使用Maven打包
我们需要创建一个Maven Project项目,我们这里使用quickstart原型(快速创建)
创建好后再pom.xml里面的build标签里面添加Maven打包插件,如果不需要可执行jar包的话,把configuration标签去掉就好了
POM结构
先放在这里,起码有个概念,会在后面的博文中讲到
Maven项目结构
项目结构是一个约定好了的目录,如果有些改动的话,可能项目都不能正常运行或打包(博主碰到过一次,贼难受)
约定的目录(不可改):
src/main/java –存放项目的.java文件 |
src/main/resources –存放项目资源文件。比方Spring,Mybatis配置文件 |
src/test/java –存放全部测试.java文件,比方JUnit測试类 |
src/test/resources ---测试资源文件 |
target ---项目输出位置,编译完毕后的东西放到这里面 |
pom.xml |
Maven生命周期
在 Maven的的生命周期里面,理想的标准构建流程为:清理->编译 -> 测试 -> 报告 -> 打包 -> 部署。并且在一个pom.xml里面全部搞定
而Maven只是一个抽象规范流程,每个周期里面的流程是有具体的插件来执行的
而每个生命周期的预设如下:
阶段 | 处理 | 描述 |
验证 validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
编译 compile | 执行编译 | 源代码编译在此阶段完成 |
测试 Test | 测试 | 使用适当的单元测试框架(例如JUnit)运行测试。 |
包装 package | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
检查 verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
运行任何一个阶段,都会从其所在生命周期的第一个阶段开始,顺序执行到指定的阶段,如:
mvn package --- 本义:执行default周期的package阶段,maven会自动从process-resources阶段开始运行到package阶段结束
Maven插件
插件plugin是绑定到生命周期,承担实际功能的组件。mvn运行时,自动关联插件来运行
下图是maven默认的各阶段对应的插件列表:
生命周期 | 生命周期阶段 | 插件目标 | 执行任务 |
clean | pre-clean | ||
clean | maven-clean-plugin:clean | 删除项目的输出目录。 | |
post-clean | |||
site | pre-site | ||
site | maven-site-plugin:site | ||
post-site | |||
site-deploy | maven-site-plugin:deploy | ||
default | process-resources | maven-resources-plugin:resources | 复制主资源文件至主输出目录 |
compile | maven-compiler-plugin:compile | 编译主代码至主输出目录 | |
process-test-resources | maven-resources-plugin:testResources | 复制测试资源文件至测试输出目 | |
test-compile | maven-compiler-plugin:testCompile | 编译测试代码至测试输出目录 | |
test | maven-surefire-plugin:test | 执行测试用例 | |
package | maven-jar-plugin:jar(ejb:ejb jar:jar rar:rar war:war) | 创建项目jar包 | |
install | maven-install-plugin:install | 将项目输出构件安装到本地仓库 | |
deploy | maven-deploy-plugin:deploy | 将项目输出构件部署到远程仓库 |
Maven常用命令
mvn clean 执行清理阶段生命周期
mvn compile 执行编译阶段生命周期
mvn package 执行打包阶段生命周期
mvn install 安装jar到本地库
mvn dependency:tree 将当前项目pom.xml中引入的依赖打印出来