0%

Maven Lesson

Maven Introduction

整理学习到的maven知识。

Concept

  1. Maven 是一个可以用于构建和管理任何基于Java的项目的工具.
    1. Maven 不仅帮我们自动化构件,还能够抽象构建过程,提供构建任务实现。
    2. Maven 跨平台。
  2. Maven 还是一个依赖管理工具和项目管理工具,提供了中央仓库,能自动下载依赖。

Maven 常用命令

  • mvn clean:表示运行清理操作(会默认把target文件夹中的数据清理)。如果要把项目部署到生产环境,需使用mvn clean package命令,确保部署的是最新的内容。
  • mvn package: Maven根据pom文件里packaging的配置,决定是生成jar文件还是war文件,并放到target目录下。此命令需要在项目的根目录(也就是pom.xml文件所在的目录)下运行,Maven才知道打包哪个项目。
  • mvn test: 该命令执行后会去运行所有的单元测试
  • mvn clean install: 该命令会把你的项目打包并放到本地仓库,可以别人就可以引用了。
  • mvn site: 该命令会为你的项目生产一个文档站点,介绍你的项目,存储位置为target/site,该命令可能只有开源项目有用吧,毕竟平常没人会去关注你的项目信息。

Maven 使用

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.twitter</groupId>
    <artifactId>twitter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>twitter</name>
</project>
  • 代码的第一行是XML头,指定了该xml文档的版本和编码方式。
  • project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素。
  • 根元素下的第一个子元素modelVersion指定了当前的POM模型的版本,对于Maven3来说,它只能是4.0.0 代码中最重要是包含了groupId,artifactId和version了。这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者jar都是以基于这些基本的坐标进行区分的。
  • groupId定义了项目属于哪个组,随意命名,比如谷歌公司的myapp项目,就取名为 com.google.myapp
  • artifactId定义了当前Maven项目在组中唯一的ID,比如定义hello-world。
  • version指定了项目当前的版本0.0.1-SNAPSHOT,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的。
  • name元素生命了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个POM声明name,以方便信息交流

Dependency 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<project>
...
<dependencies>
    <dependency>
        <groupId>实际项目</groupId>
<artifactId>模块</artifactId>
<version>版本</version>
<type>依赖类型</type>
<scope>依赖范围</scope>
<optional>依赖是否可选</optional>
<!—主要用于排除传递性依赖-->
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
<dependencies>
...
</project>

根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:

  • grounpId、artifactId和version:以来的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
  • type:依赖的类型,对于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar
  • scope:依赖的范围
  • optional:标记依赖是否可选
  • exclusions:用来排除传递性依赖

仓库的分类

本地仓库

​ 一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。

远程仓库-中央仓库

​ 由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。

​ 中央仓库包含了这个世界上绝大多数流行的开源Java构件,以及源码、作者信息、SCM,信息、许可证信息等,每个月这里都会接受全世界Java程序员大概1亿次的访问,它对全世界Java开发者的贡献由此可见一斑。