玩转Apache Maven

举报
海风极客 发表于 2022/10/16 19:07:35 2022/10/16
【摘要】 1 简介首先还是要介绍下的,防止有人初次认识Maven 是一个Yiddish单词,意思是知识的积累,最初是为了简化 Jakarta Turbine 项目中的构建过程。有几个项目,每个项目都有自己的 Ant 构建文件,都略有不同。JAR 被检入 CVS。我们想要一种构建项目的标准方法、对项目组成的清晰定义、一种发布项目信息的简单方法以及一种在多个项目之间共享 JAR 的方法。结果是现在可以用...

1 简介

首先还是要介绍下的,防止有人初次认识

Maven 是一个Yiddish单词,意思是知识的积累,最初是为了简化 Jakarta Turbine 项目中的构建过程。有几个项目,每个项目都有自己的 Ant 构建文件,都略有不同。JAR 被检入 CVS。我们想要一种构建项目的标准方法、对项目组成的清晰定义、一种发布项目信息的简单方法以及一种在多个项目之间共享 JAR 的方法。

结果是现在可以用于构建和管理任何基于 Java 的项目的工具。我们希望我们已经创建了一些东西,使 Java 开发人员的日常工作更容易,并且通常有助于理解任何基于 Java 的项目。

  • Maven 是一个站点和文档工具
  • Maven 扩展 Ant 以让您下载依赖项
  • Maven 是一组可重用的 Ant 脚本

2 下载安装和基本配置

2.1 下载安装

官网:https://maven.apache.org

下载:https://maven.apache.org/download.cgi
在这里插入图片描述
下载的时候只需要下载二进制文件就可以了

2.2 安装

ymx@ymx-PC:~/Downloads$ ls
 apache-maven-3.8.2-bin.tar.gz    
ymx@ymx-PC:~/Downloads$ tar -zxvf apache-maven-3.8.2-bin.tar.gz 
ymx@ymx-PC:~/Downloads$ sudo mv apache-maven-3.8.2 /usr/local
ymx@ymx-PC:~/Downloads$ cd /usr/local/
ymx@ymx-PC:/usr/local$ ls
apache-tomcat-9.0.44  etc    go       jdk1.8.0_141  man    mysql-5.5.60  sbin   src
apache-maven-3.8.2  bin                   games  include  lib           mysql  redis-6.2.1   share

修改/etc/profile文件,在末尾加上如下两句话,并保存退出

export MAVEN_HOME=/usr/local/apache-maven-3.8.2
export PATH=$MAVEN_HOME/bin:$PATH

刷新配置文件

ymx@ymx-PC:/usr/local$ source /etc/profile

验证安装:

ymx@ymx-PC:/usr/local$ mvn -v
Apache Maven 3.8.2 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/apache-maven-3.8.2
Java version: 1.8.0_141, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_141/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.4.70-amd64-desktop", arch: "amd64", family: "unix"

3.3 配置Maven仓库和阿里云镜像

两个配置均在Maven的全局配置文件setting.xml中
在这里插入图片描述
配置仓库:

可以使用绝对路径也可以使用相对路径
在这里插入图片描述

小扩展:maven仓库都有哪些?

在这里插入图片描述
配置阿里云镜像:
在这里插入图片描述

3 Maven初步使用

3.1 Maven的生命周期

这些构建生命周期中的每一个都由不同的构建阶段列表定义,其中构建阶段代表生命周期中的一个阶段。

例如,默认生命周期包括以下阶段(有关生命周期阶段的完整列表,请参阅生命周期参考):

  • clean - 清除项目目录

  • validate - 验证项目是否正确并且所有必要的信息都可用

  • compile - 编译项目的源代码

  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码

  • package - 将编译后的代码打包成可分发的格式,例如 JAR

  • verify - 对集成测试的结果进行任何检查,以确保满足质量标准

  • install - 将包安装到本地存储库中,作为本地其他项目的依赖项

  • deploy - 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。

3.2 基本命令

所有命令必须在带有pom.xml的目录下进行使用

其实Maven的生命周期就是Maven最常用的命令

mvn clean   //清除构建目录
mvn compile //进行项目编译,在编译之前会进行clean、validate操作
mvn verify  //对集成测试结果进行检查,在该操作之前会进行clean、validate、compile、test、package操作
mvn clean deploy  //清除项目目录并构建
......

3.3 pom要点

pom.xml包含此项目的项目对象模型 (POM)。POM 是 Maven 中的基本工作单元。记住这一点很重要,因为 Maven 本质上是以项目为中心的,因为一切都围绕着项目的概念。简而言之,POM 包含有关您的项目的每一条重要信息,并且本质上是用于查找与您的项目相关的任何内容的一站式购物。理解 POM 很重要,鼓励新用户参考POM 简介

这是一个非常简单的 POM,但仍显示每个 POM 包含的关键元素,因此让我们逐一介绍它们以熟悉 POM 要点:

  • project这是所有 Maven pom.xml 文件中的顶级元素。
  • modelVersion此元素指示此 POM 使用的对象模型的版本。模型本身的版本很少更改,但是如果 Maven 开发人员认为有必要更改模型,为了确保使用的稳定性,它是强制性的。
  • groupId此元素指示创建项目的组织或组的唯一标识符。groupId 是项目的关键标识符之一,通常基于您组织的完全限定域名。例如org.apache.maven.plugins是所有 Maven 插件的指定 groupId。
  • artifactId此元素指示此项目生成的主要工件的唯一基本名称。项目的主要工件通常是 JAR 文件。像源包这样的次要工件也使用 artifactId 作为其最终名称的一部分。Maven 生成的典型工件的格式为 <artifactId>-<version>.<extension>(例如,myapp-1.0.jar)。
  • version此元素指示项目生成的工件的版本。Maven 在帮助您进行版本管理方面大有帮助,您经常会SNAPSHOT在版本中看到指示符,这表明项目处于开发状态。我们将在本指南中讨论快照的使用以及它们如何工作。
  • name此元素指示用于项目的显示名称。这通常用于 Maven 生成的文档中。
  • url此元素指示可以找到项目站点的位置。这通常用于 Maven 生成的文档中。
  • properties该元素包含可在 POM 中的任何位置访问的值占位符。
  • dependencies这个元素的子元素列表dependencies。POM 的基石。
  • build此元素处理诸如声明项目的目录结构和管理插件之类的事情。

3.4 Maven的GAV

什么是GAV ,GAV是groupId、artifactId、version的简称,三个标签在一起就构成了当前仓库中唯一一个maven项目的坐标,并且在maven仓库中的唯一的位置。我们来看下:

新建Maven 项目
在这里插入图片描述
来执行下install安装到仓库

ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ ls
play_maven.iml  pom.xml  src
ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ pwd
/data/home/ymx/Documents/javaProject/play_maven
ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ ls -l
总用量 12
-rw-r--r-- 1 ymx ymx   80 919 21:54 play_maven.iml
-rw-r--r-- 1 ymx ymx  420 920 13:01 pom.xml
drwxr-xr-x 4 ymx ymx 4096 919 21:52 src
ymx@ymx-PC:/data/home/ymx/Documents/javaProject/play_maven$ mvn install
[INFO] Scanning for projects...
......
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.485 s
[INFO] Finished at: 2021-09-20T13:03:16+08:00
[INFO] ------------------------------------------------------------------------

查看maven仓库

ymx@ymx-PC:/data/home/ymx/mavenKu/org/ymx/play_maven/1.0-SNAPSHOT$ pwd
/data/home/ymx/mavenKu/org/ymx/play_maven/1.0-SNAPSHOT

maven仓库/data/home/ymx/mavenKu下确实有一个按照GAV拼接起来的目录/org/ymx/play_maven/1.0-SNAPSHOT

可见GAV原理就是maven项目的安装路径

4 在IDEA中使用

4.1 Project和Module关系

在这里插入图片描述

4.2 新建项目Project

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 新建Module

在这里插入图片描述

4.4 观察结果

在这里插入图片描述

5 详解pom.xml文件

5.1 什么是pom文件

POM 是 Maven 中的基本工作单元。它是一个 XML 文件,其中包含有关 Maven 用于构建项目的项目和配置详细信息的信息。它包含大多数项目的默认值。这方面的示例是构建目录,即target; 源目录,即src/main/java;测试源目录,即src/test/java;等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

可以在 POM 中指定的一些配置是项目依赖项、可以执行的插件或目标、构建配置文件等。还可以指定其他信息,例如项目版本、描述、开发人员、邮件列表等。

5.2 最小pom

POM 的最低要求如下:

  • project
  • modelVersion - 应设置为 4.0.0
  • groupId - 项目组的 ID。
  • artifactId - 工件(项目)的 id
  • version - 指定组下的工件版本

例如我们新建项目时的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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.ymx</groupId>
    <artifactId>play_maven</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

</project>

5.3 项目继承与项目聚合

5.3.1 项目继承

如上面的Project与Module的关系

5.3.2 项目聚合
<project>
  <modelVersion>4.0.0</modelVersion>
 
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent>
 
  <artifactId>my-module</artifactId>
</project>

5.4 项目插件和全局变量

5.4.1 配置插件

在 Maven 中,有两种插件,构建和报告:

  • 构建插件在构建期间执行并在<build/>元素中配置。
  • 报告插件在站点生成期间执行并在<reporting/>元素中配置。

所有插件都应具有最少的必需信息:groupIdartifactIdversion

5.4.2 全局变量

通常用来指定全局变量或部分可重用的参数,比如Spring Boot的版本控制中心

<properties>
    <mysqlVersion>5.1.47</mysqlVersion>
</properties>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysqlVersion}</version>
    </dependency>
</dependencies>

参考链接:https://maven.apache.org/

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。