Maven基础及概念
前言
今天就来聊聊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中引入的依赖打印出来
Maven基础及概念相关推荐
- maven 打包指定依赖包_[Maven]-Maven基础-01-基础概念
Maven基础 1.基础概念 Maven基础概念 什么是Maven 什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准化的 什么是依赖?为什么要进行依赖管理? 自动下载,统一依赖管理 有哪 ...
- 【Maven教程】-Maven基础篇(概念、思考、安装)
Maven教程-Maven基础篇之Maven实战入门2020年 第一章 Maven简介 1.1 软件是一个工程 1.2 传统项目开发存在的问题 1.3 Maven概述 1.4 Maven核心概念 1. ...
- maven基础概念学习1
2019独角兽企业重金招聘Python工程师标准>>> 1.maven是什么? 百度百科: Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档 ...
- Maven学习——maven基础
maven基础 前言 一.maven简介 mave的功能: 二.下载和安装 三.maven的基础概念 1.仓库 2.坐标 3.本地仓库配置 四.制作Maven项目 纯手工制作 插件制作 IDEA制作 ...
- Hive基础知识概念
Hive基础 Hive 概念 Hive优缺点 优点 缺点 Hive名词概念 hive底层执行流程 hive 与RDBMS传统关系型数据库对比 查询语言 数据更新 执行延迟 数据规模 hive基本数据类 ...
- Maven基础——什么是Maven
目录 Maven概述 一.什么是maven? 二.Maven能解决什么问题 三.依赖管理的概念 四.一键构建概念 Maven基础--Maven安装与仓库类型介绍 Maven概述 一.什么是maven? ...
- Maven基础-01-笔记
Maven基础-01-笔记 Maven基础概念(坐标.仓库) 1.仓库 2.坐标 3.仓库配置 Maven基础概念(坐标.仓库) 1.仓库 仓库:用于存储资源,主要是各种jar包 关于仓库,我们前面讲 ...
- 2021-03-12 Python基础核心概念 变量和简单数据类型
Python基础核心概念 1 变量和简单数据类型 变量命名格式:变量名 = "赋值" 1.1 变量使用规范 使用变量时,需要遵守一些规则.违反这些规则将引发错误. ~变量名只能包含 ...
- Maven基础与私服搭建
Blog诞生记 Android studio构建项目有时候build.gradld构建缓慢,严重影响了开发心情,这仅是次要因素,最重要的是leader为了考虑团队发展,建议搭建Maven私服,把项目模 ...
最新文章
- linux 声卡权限,archlinux的声卡问题如何解决
- oracle(thin),kettle thin方式连接oracle,MySQL、SqlServer
- d3js mysql_D3js技术文档 可视化展现
- 熟练使用Jmeter,这个知识点你一定要看
- java学生奖学金管理系统_EasyUI+JavaWeb奖助学金管理系统[6]-登录功能实现
- windows系统搭建redis集群
- maven阿里仓库配置教程
- 差分编码与译码代码编写
- [Java聊天室服务器]实战之六 去除死链接
- 谢菲尔德大学计算机科学学院地理位置,2020年谢菲尔德大学在哪里及校区详细地址介绍...
- 支付二维码整合 - 三码合一支持支付宝、QQ、微信
- android的app,用java程序开发
- mysql 开启事物_mysql事务的开启
- beyond the ‘PHYSICAL‘ memory limit. Current usage: 1.0 GB of 1 GB physical memory used;
- FRDM-KW41Z开发板使用显示驱动芯片HD44780的方法
- 信创操作系统--统信UOS桌面操作系统博文汇总目录
- 九年老程序员推荐的java书籍,建议收藏!!
- 苹果cms整合dplayer播放器增加记忆+P2P播放+自动下一集
- 瑞芯微RV1126平台----yolov5输出后处理C++实现
- java语言中的while、do while、for循环
热门文章
- else应输入一个语句是什么意思_Python学习基础篇 -4: Python中的转弯---分支语句
- 计算机考试设计会议邀请函,计算机二级常见考点之使用合并技术制作邀请函
- MVC 模式/Servlet/JSP 编译原理剖析:Servlet 组件到底属于 MVC 模式的哪一层?
- Python练习之 对文件进行创建,然后重命名文件最近进行文件删除
- 七、Python第七课——有关列表的二三事(切片、切片的遍历和复制)
- Win7系统转到Win10系统的装机方法
- mount --bind的用处
- f分布表完整图_【教育统计答疑】如何理解正态分布、均值分布、^2分布、t分布和F分布...
- 存储器是计算机的记忆装置,存储器(Memory)
- kettle同步数据到hive 巨慢_超详细教程,kettle ETL mysql到hadoop hive数据抽取,值得收藏...