maven
what is maven?
是一个项目管理工具,可以对Java项目进行构建、依赖管理。
why maven?
在传统的项目当中,如果没有maven,会有以下几个弊端
- 模块之间的关系需要手动管理
- 第三方功能需要的jar文件,需要手动下载
- jar文件的版本问题
- jar文件的版本依赖问题
maven的功能
- 管理jar文件
- 自动下载jar文件
- 管理jar的依赖,如果要使用的jar文件有依赖的jar文件,maven会自动下载
- 管理jar版本
- 编译程序 java-> class
- 测试代码是否正确
- 打包文件为jar 或者war文件
- 部署项目
项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译、测试、运行、打包、部署等。
maven支持的构建有:
- 清理,把之前的项目编译的东西删除,为新的编译代码做准备
- 编译,把程序源代码批量的编译为执行代码(可以同时很多,javac一次只能编译一个)
- 测试,可以批量测试程序代码
- 报告,生成测试结果文件
- 打包,把项目中所有的class文件、配置文件放到一个压缩文件当中。这个压缩文件就是项目的结果文件,java程序为.jar,web程序是.war
- 安装,将5中生成的文件jar,war安装到本机仓库
- 部署,把程序安装好就可以执行
Maven的主要作用
- 管理依赖
- 构建项目
安装&配置
从官网下载。
解压安装包到一个非中文的目录下面。
进行环境变量的配置:
- 新建一个系统变量
- 再将其放到Path当中 %M2_HOME%\bin
mvn -v检测是否安装成功(注意是要再Java安装好的前提下)
因为maven官方提供的服务器在国外比较慢,在国内可以使用阿里云的下载地址。
打开maven安装包conf文件下面的settings.xml在mirrors下新加一个阿里云的镜像地址:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
Maven需要了解的概念
- POM(项目对象模型):通过pom.xml文件进行管理。maven把一个项目当作一个模型使用。可以控制maven构建项目的过程,管理jar依赖。
- 约定的目录结构:maven项目的目录喝文件的位置都是规定的。
- 坐标:是一个唯一的字符串,用于表示资源的。
- 依赖管理:管理项目可以使用jar文件的。
- 仓库管理(了解):资源存放的位置
- 生命周期(了解):maven工具构建项目过程。
- 插件和目标(了解):执行maven构建的时候用的工具是插件
- 继承
- 聚合:好几个项目归纳到一起
Maven的约定目录结构
每一个maven项目中都是一个文件夹
项目名称/
—/src
------/main #主程序java代码和配置文件
---------/java #程序包和包中的java文件
---------/resources #java程序中要使用的配置文件
------/test #当测试程序代码和文件(可以没有)
---------/java #测试程序包和包中的java文件
---------/resources #j测试ava程序中要使用的配置文件
—/pom.xml #maven的核心文件(必须有)
Maven仓库
仓库的定义
存放maven使用的jar(插件)和项目使用的jar(第三方的工具)
仓库的分类
本地仓库
个人计算机上的文件夹,存放各种jar。
maven工具执行的操作需要很多的jar文件(插件)完成,这些插件在编译的时候,如果没有会自动下载,下载之后默认存放到本地仓库当中。
如果要更改本地仓库的位置
在安装包下的conf下打开settings.xml文件,修改localRepository
<localRepository>E:/myapp/maven/repository</localRepository>
拿出注释之后修改
远程仓库
联网才能使用的仓库
中央仓库
最权威的,所有的开发人员都共享使用的一个集中仓库。
中央仓库的镜像
私服
在公司内部,局域网中使用,不对外。
仓库的使用
maven仓库的使用不需要人为的参与。
如果开发人员需要使用mysql驱动——>maven首先查找本地仓库 ——>如果本地仓库没有则访问私服——> 如果私服没有 就访问镜像——>都没有就访问中央仓库。
POM(核心)
基本信息
modelVerion: Maven模型的版本
groupId:组织id,一般是公司域名的倒写
artifactId:项目名称
version:项目版本号
packaging:项目打包的类型,默认是jar包,web是.war
坐标
唯一值,在互联网中唯一标识一个项目的
公司域名的倒写
自定义项目名称
自定版本号
在中央仓库当中,可以使用groupId或者artifactId作为搜索条件
坐标用于搜索
依赖(dependency&dependencies)
项目中要使用的各种资源的说明
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId></artifacyId>
<version></version>
<dependency>
</dependencies>
属性(properties)
用于定义一些配置属性的。
构建(build)
build表示与构建相关的配置,比如这是编译插件的jdk版本
生命周期
maven的生命周期就是maven构建项目的过程。
maven独立使用,通过命令完成maven的生命周期的执行。
maven命令执行时,真正完成功能的时插件
常用命令
mvn clean 清理,会删除target目录,但是install进仓库中的包不会删除
mvn compile 编译,会产生一个target
mvn test-compile 编译测试程序
mvn test 测试,生成一个目录surefire-reports,用于保存测试的结果
mvn package 打包主程序,按照pom.xml配置把主程序打包为jar或者war包,只会打包main下面的内容,test下面的不打包
mvn install 安装主程序,把本工程打包,并且按照本工程的坐标保存到本地仓库中,别人可以用了
mvn deploy 部署主程序,把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中,还会自动把项目部署到web容器中
**以上命令要在pom.xml所在目录下执行
配置插件(plugin)
<!--配置插件-->
<plugins>
<!--配置具体插件-->
<plugin>
<groupId></groupId>
<!--插件的名称-->
<artifactId></artifacyId>
<!--插件的版本-->
<version></version>
<!--配置插件的信息-->
<configuration>
<source></source>
<target></target>
</configuration>
</plugin>
</plugins>