一、Maven项目目录结构

Maven约定了一套目录结构,如下图:

mvn group类型仓库 maven仓库结构_intellij-idea

二、Maven仓库

Maven仓库是一个专门存放项目中依赖的第三方库的位置。Maven仓库分为本地仓库和远程仓库。

2.1、本地仓库

本地仓库相当于一个缓存,是一个文件夹,这个文件夹路径可以设置。项目工程中需要某个jar包,Maven第一次会从远程仓库中下载并保存在本地仓库中,第二次就不需要下载可以直接使用。

2.2、远程仓库

远程仓库分为私服和中央仓库。中央仓库的jar包由Maven团队维护,存放了全世界大多数流行的开源软件jar包,是Maven默认的远程仓库。Maven仓库查看地址:https://search.maven.org/#browse

私服:一种特殊的远程仓库。是一个在局域网内架设的私有仓库服务器,用其来代理所有外部远程仓库。内部的项目也能部署到私服上供其他项目使用。

mvn group类型仓库 maven仓库结构_intellij-idea_02

2.3、配置本地仓库

在Maven安装目录的conf目录下的文件 setting.xml中添加如下内容:

<!--配置本地仓库-->
<localRepository>D:\.m2\repository</localRepository>

mvn group类型仓库 maven仓库结构_mvn group类型仓库_03

2.4、配置远程仓库镜像

由于中央仓库在国外,下载速度过慢,我们可以使用国内阿里云的Maven仓库作为中央仓库镜像。

修改Maven安装目录的conf目录下的文件 setting.xml内容:

<mirror>
      <id>nexus-aliyun</id>
      <name>Nexus aliyun</name>
      <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>

标签的含义:

标签

含义

id

当前镜像唯一标识

mirrorOf

将哪个远程仓库当做中央仓库镜像,中央仓库的id是central,* 代表全部

name

为当前中央仓库镜像取一个名字

url

阿里云远程仓库地址

mvn group类型仓库 maven仓库结构_远程仓库_04

三、Maven的核心文件pom.xml

3.1、pom

POM(project object model)项目对象模型:Maven工程的基本工作单元,是一个xml文件。描述了项目基本信息:描述项目如何构建,声明项目依赖。

执行目标或任务时,Maven会在当前目录查找pom。它读取pom,获取配置信息,然后执行目标。

<?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">
    <!-- Maven模型版本-->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,Maven最终将该项目打包的jar包本地路径:/com/jsonLiu/test-->
    <groupId>com.jsonliu.test</groupId>
    <!-- 项目的唯一ID,一个groupId项目可能有多个项目,靠artifactId区分-->
    <artifactId>testMaven</artifactId>
    <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时可以调取不同版本,使用不同的版本号就可以。
        snapshot为快照版本即非正式版本,release为正式发布版本-->
    <version>1.0-SNAPSHOT</version>
    <!-- 名称:可省略,常用于Maven生成的文档-->
    <name>testMaven</name>
    <!-- 项目描述:可省略,常用于Maven生成的文档-->
    <description>Maven test project</description>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <!-- 项目依赖构件配置,配置项目依赖构件的坐标-->
    <dependencies>
        <!-- 依赖设置,可以有多个dependency节点-->
        <dependency>
            <!-- 依赖组织名称-->
            <groupId>junit</groupId>
            <!-- 依赖项目名称-->
            <artifactId>junit</artifactId>
            <!-- 依赖版本名称-->
            <version>4.12</version>
            <!-- 依赖范围:test包下依赖该设置-->
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!-- 项目构建配置,配置编译、运行插件-->
    <build> 
    </build>
</project>

3.2、Maven坐标

Maven中的坐标就是为了定位一个唯一确定的jar包。

Maven坐标的组成:

<!-- 依赖设置,可以有多个dependency节点-->
        <dependency>
            <!-- 依赖组织名称-->
            <groupId>junit</groupId>
            <!-- 依赖项目名称-->
            <artifactId>junit</artifactId>
            <!-- 依赖版本名称-->
            <version>4.12</version>
            <!-- 依赖范围:test包下依赖该设置-->
            <scope>test</scope>
        </dependency>

标签

含义

groupId

定义当前Maven项目组织名称

artifactId

定义实际项目名称

version

当前项目的当前版本或所依赖的jar包版本

scope

依赖使用范围

四、Maven生命周期

Maven的生命周期对所有的构建过程进行抽象和统一。包括:

  • 清理
  • 初始化
  • 编译
  • 打包
  • 测试
  • 部署

4.1、Maven三大生命周期

Maven拥有三套相互独立的生命周期:clean、default、site

clean Lifecycle:在进行真正构建之前进行一些清理工作。mvn clean

default Lifecycle:构建的核心部分,包括编译、测试、打包、部署等等

site Lifecycle:生成项目报告,站点,发布站点。

4.2、clean

clean的目的是清理项目。

每套生命周期都有一组阶段(Phase)组成,我们在命令行输入的命令对应一个特定的阶段。比如:mvn clean,是Clean生命周期的一个阶段。

Clean包含三个阶段:

  1. pre-clean:执行一些清理前需要完成的工作
  2. clean:清理上一次构建生成的文件,比如:class文件等
  3. post-clean:执行一些清理后需要完成的工作

4.3、default生命周期

所有生命周期中最核心的部分,绝大部分工作都在这个生命周期。

  • generate-resources:产生主代码中的资源在classpath中的包
  • process-resources:复制并处理资源文件至目标目录,准备打包。
  • compile:编译项目的主源码,一般来说:编译/src/main/java目录下的java文件至项目输出的主classpath目录中。
  • test-compile:编译项目的测试代码,编译/src/test/java目录下的java文件至项目输出的测试classpath目录下。
  • test:使用单元测试框架运行测试,测试代码不会被打包或部署
  • package:打包成可发布的格式
  • install:将包安装到Maven本地仓库,供本地其他Maven项目使用
  • deploy:将最终包复制到远程仓库

在运行任何一个阶段时,它前面的阶段都会被执行,这也就是我们运行mvn install时,代码会被编译、测试、打包。此外,Maven的插件机制完全依赖Maven的生命周期。


4.4、site生命周期

目的:建立和发布项目站点

  • pre-site:执行一些在生成站点之前需要完成的工作
  • site:生成项目站点文档
  • post-site:执行一些在生成站点之后需要完成的工作
  • site-depoly:将生成的站点项目发布到服务器