一篇就够

一篇就够 | 快速理解什么是maven

2020-05-04  本文已影响0人  朦胧夏月凉

这篇文章会将笔者站在实用角度认为 maven 最重要的知识抽象提取出来,直击重点,从理论层面带你快速理解什么是 maven。

内容预览:

一、maven介绍

maven概念

maven是一个项目包管理工具,也是一种项目框架,满足maven项目结构规范的项目被称为maven项目。作为工具,maven可以用来完成外部工具包的导入,它的功能还远远高于管理包的导入:

maven仓库

maven 在导入依赖包时,会按以下顺序在仓库中逐个寻找需要导入的包

Maven 项目中依赖的搜索顺序实验 - 云栖社区

结论:(检索项目依赖优先级)local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

生命周期

maven官方文档:入门指南 - 生命周期

以下是build一个项目时,可选的生命周期,也被称为"构建生命周期",选择一个生命周期后,maven会按下方的顺序依次执行各个生命周期,直至所选的那个生命周期执行结束。例如如果选择了 package,则会从 validate 执行至 package,不需要进行后面的 verifyinstalldeploy

除了上面的"构建生命周期",maven还有另外两个生命周期指令,分别是:

使用方式

Maven常用命令 - cnblogs

Eclipse构建Maven项目 - 易百教程
在IDEA中创建maven项目

常见标签

<groupId>

位置:pom.xml
作用:定义项目所在的组号,类似于java文件的package值
举例 :

<groupId>com.zty</groupId>

<artifactId>

位置:pom.xml
作用:定义项目的名称,与groupId共同构成唯一的项目索引,类似于java文件的class值
举例 :

<artifactId>account</artifactId>

<version>

位置:pom.xml
作用:定义项目的版本号,供项目的依赖者进行选择
举例 :

<version>1.1.0</version>

<properties>

位置:pom.xml
作用:定义属性值,同一项目的其他地方可以通过EL表达式(${ })来获取这些属性值的内容,这样做的目的是统一管理那些被多次使用的内容
举例 :

<version>${zty-framework.version}</version>
...
<properties>
  <zty-framework.version>0.8.1</zty-framework.version>
  <spring-web.version>5.2.3.RELEASE</spring-web.version>
  <fastjson.version>1.2.68</fastjson.version>
</properties>

<parent>

位置:pom.xml
作用:声明当前项目继承的父项目,类似于java文件的extends,子项目将会继承父项目的所有内容,包括父项目的<properties>
举例 :

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.4.RELEASE</version>
</parent>

<packaging>

位置:pom.xml
作用:声明当前项目的打包格式,默认值为jar,可选值为war、jar、pom
举例 :

<packaging>war</packaging>

<module>

位置:pom.xml - <modules>
作用:定义当前项目的子模块,必须与<packaging>pom</packaging>配套使用(所有被继承的项目的packaging必须为pom)
举例 :

<packaging>pom</packaging>
...
<modules>
  <module>wx</module>
  <module>file</module>
  <module>account</module>
  <module>redis</module>
  <module>wheel-gateway</module>
  <module>framework</module>
</modules>

<repository>

位置:setting.xml - <repositories>
作用:定义"远程仓库",例如公司内部的maven仓库地址
举例 :

<repositories>
  <repository>
    <id>pom_repositories</id>
    <name>XX_Company</name>
    <url>http://10.18.29.128/nexus/content/groups/public/</url>
    <releases>
      <enabled>true</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

<dependency>

位置:pom.xml - <dependencies>
作用:用于指明需要引入的依赖
举例 :

<dependency>  
  <groupId>net.sf.json-lib</groupId>   
  <artifactId>json-lib</artifactId>   
  <version>2.2.2</version>
  <classifier>jdk15</classifier>
  <scope>compile</scope>  <!-- 可选值为: compile test provided runtime system -->
</dependency>  

<plugins>

位置:pom.xml - <build>或<reporting>
作用:指明用于覆盖maven默认操作的工具。maven指令的执行,其实也是基于插件进行的,maven有一套默认的官方插件,如果在项目pom.xml里引入plugins,执行maven指令操作时将会优先基于plugins的逻辑对项目进行操作,而不是maven默认的官方插件,例如Springboot打包的原理就是引入了专门的springboot-plugins。<build>对应于打包操作,<reporting>对应于报告。
举例 :

...
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

二、使用maven的最佳实践

关于使用maven的最佳实践,可参考我的另一篇文章:

一篇就够 | 教你用maven搭建自己的开发框架

三、本文总结

从实用角度看,maven主要有两大核心作用:

  1. 管理外部依赖包的导入;
  2. 将项目做成依赖包,使我们可以使用面向对象思想管理项目;

最后,如果你对文章内容存在疑惑,欢迎添加我的个人微信进行交流,如果你觉得文章写得不错,给我点个赞吧 ^_^

上一篇 下一篇

猜你喜欢

热点阅读