玩转Apache Maven

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 玩转Apache Maven

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 生成的典型工件的格式为 -.(例如,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 9月  19 21:54 play_maven.iml
-rw-r--r-- 1 ymx ymx  420 9月  20 13:01 pom.xml
drwxr-xr-x 4 ymx ymx 4096 9月  19 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/

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java Maven
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
102 1
|
1月前
|
Java
springboot打包错误:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resource
springboot打包错误:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resource
33 0
|
1月前
|
前端开发 JavaScript Java
IDEA Maven install Failed to execute goal org.apache.maven.plugins异常处理
IDEA Maven install Failed to execute goal org.apache.maven.plugins异常处理
104 0
|
7月前
|
Java Maven
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4
|
8月前
|
Java 应用服务中间件 Apache
Apache Maven项目的搭建与部署
Apache Maven项目的搭建与部署
250 0
|
1月前
|
Java Maven
Maven打包出错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test
Maven打包出错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test
237 0
|
7月前
|
Java 关系型数据库 Apache
Apache Maven简介&安装及系统坏境配置&eclipse配置Apache Maven---详细介绍
Apache Maven简介&安装及系统坏境配置&eclipse配置Apache Maven---详细介绍
77 0
|
9月前
|
XML Java Apache
Apache Maven:从构建到部署,一站式解决方案
Apache Maven:从构建到部署,一站式解决方案
182 0
|
10月前
|
Java Maven Android开发
成功解决maven打war包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2
成功解决maven打war包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2

热门文章

最新文章

推荐镜像

更多