maven从入门到精通
Maven文章目录Maven一、为什么需要Maven?1、当我们在开发中,常会遇到以下问题2、maven的概念及优势二、Maven的安装与配置1、maven在本地的配置2、在IDEA中配置maven插件三、Maven的概要1、maven的仓库分类及关系2、Maven工程的目录结构3、maven常用的指令及指令绑定4、maven的生命周期5、项目对象模型6、依赖管理系统7、一组标准集合四、在IDE.
Maven
文章目录
一、为什么需要Maven?
1、当我们在开发中,常会遇到以下问题
- 工程中用到的jar包都需要手动引入到工程目录,经常会遇到jar包冲突。不同项目中的jar包重用性弱。
- 从编写java文件到工程项目部署,步骤繁琐,生命周期漫长。
- 编写完代码后,需要写单元测试检验代码质量。
- 每个人编写代码的风格不同,无法统一工程目录结构。
2、maven的概念及优势
概念:Maven是一个项目管理工具,它包含了一个项目对象模型(POM Project Object Model),一组标准集合,一个项目生命周期(Project LiftCycle),一个依赖管理系统(Dependency Mainagement System),和用来运行定义在声明周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
官方的定义总是那么绕,总的来说,maven主要是
- 统一了开发规范
- 统一管理jar包(依赖管理)
二、Maven的安装与配置
从官网上下载的压缩包直接解压即可,在安装maven前,需要确保自己的电脑中安装了jdk。
1、maven在本地的配置
配置环境变量
同样需要在Path中配置
验证是否安装成功
在命令提示行中输入mvn -v,显示如下,即证明暗转成功
2、在IDEA中配置maven插件
在IDEA中,依次打开Settings–>Build,Execution,Deployment–>Maven
配置maven目录及maven仓库
本地仓库的配置
本地仓库的路径默认为:${user.home}/.m2/repository
其中,本地仓库的路径是可以修改的,只需要在config/settings.xml中添加本地仓库路径即可,即localRepository
三、Maven的概要
1、maven的仓库分类及关系
-
本地仓库:存储从远程仓库或者中央仓库下载的插件和jar包,项目中需要使用的jar优先从本地仓库中拿。
-
远程仓库:若本地仓库中没有项目中要用的jar包,则从远程仓库取。
-
中央仓库:maven中内置了一个远程仓库地址http://repo1.maven.org/maven2,这个网址就是中央仓库,服务于整个互联网,里面保存了几乎所有的jar包
Note:maven项目所需要的jar包会优先从本地仓库中取,若在本地仓库中没有找到,①若是个人项目,并且电脑联网,则会从中央仓库中下载所需的jar包放入到本地仓库中。②若是公司项目,公司可能会有自己的仓库(私服),当在本地方库找不到,会转向远程仓库,若远程仓库也找不到,则会转向中央仓库。
2、Maven工程的目录结构
使用maven创建的普通java工程,其目录结构如下
作为maven工程,它的src目录和pom.xml文件是必备的
-
**src/main/java:**放置编写的.java文件
-
src/main/resources:放置项目资源文件
-
**src/test/java:**存放所有单元测试.java文件,如Junit测试类
-
src/test/resources:测试资源文件
-
target:项目输出的位置,编译后的class文件会输出到此目录
-
pom.xml:maven项目的核心配置文件
若使用maven创建Web工程,则会在原有的目录结构中多出webapp目录
src/main/webapp:页面素材资源等
但是WEB-INF是java的应用安全目录,即客户端无法访问,只有服务端可以访问的目录,如果想在页面中直接访问其中的文件,必须通过web.xml对要访文件进行相应的映射才能访问。
3、maven常用的指令及指令绑定
- compile:maven的工程编译指令,其作用是将src/main/java下的文件编译为class文件输出到target目录下
- test:maven工程测试命令,执行src/test/java下的单元测试类
- clean:maven工程的清理命令,执行clean会删除target目录及内容
- package:maven工程的打包命令,将java工程打成jar包,将web工程打成war包
- install:maven工程的安装命令,其作用是将jar包或war包发布到本地仓库
4、maven的生命周期
maven对项目的构建过程分为三套相互独立的生命周期
-
Clean LifeCycle:项目构建前的清理工作
-
Default LifeCycle:项目构建的核心部分,如编译、测试、打包、部署等。
-
Site LifeCycle:项目报告的生成、站点的发布
生命周期内都包含了要执行的指令,一个标准的构建LifeCycle包含如下的指令:
validate: 用于验证项目的有效性和其项目所需要的内容是否具备
initialize:初始化操作,比如创建一些构建所需要的目录等。
generate-sources:用于生成一些源代码,这些源代码在compile phase中需要使用到
process-sources:对源代码进行一些操作,例如过滤一些源代码
generate-resources:生成资源文件(这些文件将被包含在最后的输入文件中)
process-resources:对资源文件进行处理
compile:对源代码进行编译
process-classes:对编译生成的文件进行处理
generate-test-sources:生成测试用的源代码
process-test-sources:对生成的测试源代码进行处理
generate-test-resources:生成测试用的资源文件
process-test-resources:对测试用的资源文件进行处理
test-compile:对测试用的源代码进行编译
process-test-classes:对测试源代码编译后的文件进行处理
test:进行单元测试
prepare-package:打包前置操作
package:打包
pre-integration-test:集成测试前置操作
integration-test:集成测试
post-integration-test:集成测试后置操作
install:将打包产物安装到本地maven仓库
deploy:将打包产物安装到远程仓库
Note:当执行任何一个指令时,maven都会将其之前指令都会执行。
生命周期的每一个指令都需要相应的goal来执行。生命周期的每个过程都是基于插件完成的。
我们并不需要了解生命周期内的所有的指令,只需要掌握核心的指令完成项目的构建,如清理、编译、测试、部署等过程即可。
5、项目对象模型
项目对象模型(Project Object Model)对应是工程中的pom.xml文件,我们可以通过pom.xml文件定义项目的坐标、项目的依赖、项目信息和插件等。
6、依赖管理系统
- 使用maven可以对所依赖的jar包进行统一管理。如项目依赖servlet,就需要在pom.xml文件中引入相关的依赖
<dependencies>
<dependency>
<!--项目的名称-->
<groupId>javax.servlet</groupId>
<!--模块名称-->
<artifactId>servlet-api</artifactId>
<!--版本号-->
<version>2.5</version>
<!--依赖作用的范围-->
<scope>provided</scope>
</dependency>
</dependencies>
-
插件,以mvn-clean为例
<plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin>
Note:groupId、artifactId、version这三个元素是项目的坐标,maven通过坐标找到相应的jar包
groupId:项目所在组,一般是组织或公司
artifactId:当前在组中的唯一Id
version:版本号
scope表示依赖范围
依赖范围 | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行时classpath有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | - | Y | - | Junit |
provided | Y | Y | - | Servlet-api |
runtime | - | Y | Y | JDBC驱动实现 |
system | Y | Y | - | 本地仓库之外的类库文件 |
7、一组标准集合
maven将整个项目的管理过程定义了一组标准,比如,通过maven构建工程有标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义。
四、在IDEA中使用Maven
1、使用maven构建java工程
- 采用maven骨架(maven-archetype-quickstart),也可不采用直接构建
- 填写唯一识别的坐标,GroupId、ArtifactId、Version
- 配置目录和本地仓库
- 填写唯一识别的坐标,GroupId、ArtifactId、Version
- 确定项目名称
-
根据maven的标准目录结构补全项目的目录结构
建新目录–>右击—>Mark Directory as—>想要的目录类型
2、使用maven创建web工程
- 使用骨架(maven-archetype-quickstar-webapp)
剩下的操作步骤都是和构架java工程相同的
更多推荐
所有评论(0)