简单介绍

  • 介绍
    Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。
    需要依赖java的环境

  • 特点
    可以根据指定版本自动解决 jar 包版本兼容问题,并且把所依赖的其它 jar 包自动下载并引入项目。

  • 官网
    http://maven.apache.org/

  • 构建过程的几个主要环节
    ①清理:删除以前的编译结果,为重新编译做好准备。
    ②编译:将Java源程序编译为字节码文件。
    ③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
    ④报告:在每一次测试后以标准的格式记录和展示测试结果。
    ⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应war包。
    ⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
    ⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml


说明:Hello:根目录,也就是工程名
src:源代码
main:主程序
java:主程序的 java 源码
resources:主程序的配置文件
test:测试程序
java:测试程序的 java 源码
resources:测试程序的配置文件
pom.xml:Maven 工程的核心配置文件。
一般情况下,我们习惯上采取的措施是:约定>配置>编码
maven 的 pom.xml 记录的关于构建项目的各个方面的设置,maven 从 pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。

POM文件

即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。

属性 表示的信息
modelVersion Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0
groupId 组织id,一般是公司域名的倒写。格式可以为: 域名倒写。 例如 com.baidu; 域名倒写+项目名。例如 com.baidu.appolo
artifactId 项目名称,也是模块名称,对应 groupId 中 项目中的子项目。
version 项目的版本号。如果项目还在开发中,是不稳定版本, 通常在版本后带-SNAPSHOT; version 使用三位数字标识,例如 1.1.0
packaging 项目打包的类型,可以使 jar、war、rar、ear、pom,默认是 jar
dependencies 和 dependency Maven 的一个重要作用就是管理 jar 包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的 jar 包,在 Maven 中,这些 jar 就被称为依赖,使用标签 dependency 来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven 把所有的 jar 包也都视为项目存在了。
properties properties 是 用 来 定 义 一 些 配 置 属 性 的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
build build 表示与构建相关的配置,例如设置编译插件的 jdk 版本
parent 在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机制,用 parent 声明要继承的父工程的 pom 配置。
modules 在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫 Maven 的聚合。

仓库

  • 中央仓库
    存放全球市面上所有的主流第三资源包的一个仓库其本质就是一个网站。
    网站:https://mvnrepository.com/

  • 镜像仓库
    jar服务器是在国外,国内下载速度可能受限,因为国内某些IT公司做了一个镜像服务器,将中央仓库的所有jar包全部都镜像到国内服务器。
    阿里巴巴的镜像仓库。
    网址:maven.aliyun.com

  • 本地仓库
    从远程仓库下载的jar包的存放位置。
    本质就是磁盘上的一个文件夹而已。

修改仓库

修改配置文件:apache-maven-3.5.4\conf\settings.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
localRepository:本地仓库
如:
<localRepository>C:\Empolder\mvn-repository</localRepository>


mirrors中的mirror:镜像仓库
如:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>

版本统一

如多个jar包配合时,要保持同一个版本(如spring)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<properties>
<spring.version>4.3.6.RELEASE</spring.version>
</properties>

<!-- Spring DI 容器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>

继承后排除某个子包

exclusion标签
例如:zookeeper排除slf4j日志包

1
2
3
4
5
6
7
8
9
10
11
12
<!--zookeeper-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

maven项目常用的两个创建方式

org.apache.maven.archetypes:maven-archetype-quickstart普通项目
org.apache.maven.archetypes:maven-archetype-webappweb项目

打包

在maven项目目录下输入命令
mvn package