当前位置:首页 > 技术分析 > 正文内容

Maven解析让你从新手到高手(maven介绍)

背景

本文从实战角度出发,笔者多年经验总结,能让你快速理解Maven,知其然且知其所以然,全是干货,让我们开始吧。

文章概览

  1. Maven能做什么
  2. Maven自身配置
  3. Maven插件管理
  4. Pom文件介绍
  5. Maven其他

1.Maven能做什么

Maven是一个软件项目管理工具,主要用于构建和管理项目,功能比较丰富。在这里笔者着重想告诉你,Maven主要干两件事:

  1. Jar包依赖管理 在项目中使用第三方jar是再正常不过的一件事,大家也习以为常。没有maven之前项目使用jar需要我们手动下载,遇到jar依赖问题不得不继续下载直到把所有的jar包下载到项目中,这个过程是痛苦的也浪费程序员宝贵时间。但Jason Van Zyl这位牛逼的程序员搞定了这件事,他开发的Maven工具可以帮你解决下载jar包,若遇到jar包依赖还能自动下载依赖的jar包,整个过程只需要程序员设定一下配置文件即可完成。
  2. 提供标准目录结构 Maven能统一项目目录,这是怎么回事呢?在没有maven工具之前,每个项目的目录结构不同,比如A项目有3个文件夹,B项目有4个文件夹,在小范围内研发没有问题,一旦范围扩大就没有章法显得目录管理混乱。于是Maven就提供统一目录结构,告诉人们只要你用Maven就会是像下面这样结构。


2.Maven自身配置

  1. 下载安装Maven 需要提前安装好JDK,然后官网下载需要的版本,注意Maven版本与JDK版本匹配,然后配置Maven环境变量M2_HOME=安装路径,添加path变量%M2_HOME%\bin,CMD窗口执行mvn -v验证。
  2. setting.xml文件 该文件有内有很多元素,每个元素代表不同含义,本文介绍比较常用的几个:<localRepository></localRepository>:指定下载来的jar包保存目录,默认位置${user.home}/.m2/repository<servers></servers>:如果有私服,这里可以配置服务器认证信息,以便Maven能够访问和上传到指定的仓库<mirror></mirror>:jar包下载地址,一般国内配置阿里云镜像地址http://maven.aliyun.com/nexus/coptent/groups/public<profiles></profiles>:定义一组配置集合,适应不同环境,比如开发、测试、生产,POM文件<properties>元素引用该组配置,并激活其中一个。

3.Maven插件管理

Maven是通过各种各样的插件管理项目的,Maven自身仅仅是一个框架,常用的插件比如有cleancompilerinstalljarwarinstall等,这些插件也是由Apache提供,插件列表请查看官网。

4.POM文件介绍

POM.xml文件是project object model缩写,翻译过来叫项目对象模型,说人话就是用它来定义每个项目,该文件也是xml格式,每个元素代表不同含义,本文介绍常用几个:

  1. <parent></parent>:这个元素定义当前模块的父项目的坐标(groupid、artifactid、version)。
  2. <properties></properties>:用于定义项目使用的属性,比如JDK版本、项目版本、或者jar版本,该元素可以继承。
  3. <dependencyManagement></dependencyManagement>:父项目声明依赖,能让所有子项目中引用依赖且不用显示列出版本号。
  4. <dependencies></dependencies>:显示具体依赖,在父子项目中,该元素可以继承。
  5. <profiles><profile></profile></profiles>:定义不同的构建环境,比如开发、测试、生产环境。
  6. <build><plugins><plugin></plugin></plugins></build>:项目中需要使用的使用的插件,该元素可以继承。
  7. <build><resources>><resource></resource></resources></build>:构建项目中处理配置文件,比如将某个配置文件打包到指定项目路径。
  8. <distributionManagement><repository></<repository>></distributionManagement>:该元素将构建的结果比如jar、war发布到远程仓库,该元素可以配置远程仓库主仓库和快照仓库(id、name、url),与setting.xml中的servers元素对应。
  9. <repositories><repository></repository></repositories>:项目构建过程中需要访问的所有外部Maven仓库配置。
  10. <pluginRepositories></pluginRepositories>:项目构建过程中可以从这个仓库下载插件,指定专门的插件仓库地址。

5.Maven其他

  1. Maven在大项目中管理多模块,模块与模块间存在三种关系:
    1. 依赖:假设模块service-module依赖common-module,在pom文件中直接使用<dependency>引用。
    2. 继承:若模块与模块之间存在继承关系,则子模块在pom文件中直接使用<parent>引用父坐标。
    3. 聚合:聚合将多个子模块组织在一起,由父模块协调子模块构建,子模块有自己的业务逻辑,有单独的pom.xml文件,可以独立部署。先有一个聚合项目,父模块名称aggregator-project,子模块名称module-a,父子模块在同级目录下,当父模块进行构建时,会先进入上一级目录,在上一目录中搜素子目录。父POM文件<modules>定义子模块,例如:<module>../module-a</module>,子模块POM文件<parent>引用父模块,例如:<parent><relativePath>../aggregator-project/pom.xml</relativePath></parent>
聚合关系:父POM
<!-- aggregator-project/pom.xml -->
 <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.example</groupId>
     <artifactId>aggregator-project</artifactId>
     <version>1.0.0</version>
     <packaging>pom</packaging>

     <modules>
         <module>../module-a</module>
         <module>../module-b</module>
     </modules>
 </project>
聚合关系:子POM
<!-- module-a/pom.xml -->

 <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>

     <parent>
         <groupId>com.example</groupId>
         <artifactId>aggregator-project</artifactId>
         <version>1.0.0</version>
         <relativePath>../aggregator-project/pom.xml</relativePath>
     </parent>

     <artifactId>module-a</artifactId>
 </project>
  1. Maven常用命令:
    1. mvn clean:重新构建之前删除target目录及内容,清理旧的编译结果
    2. mvn compile:将java源码编译成字节码
    3. mvn test:执行单元测试
    4. mvn package:打包项目,生成最终文件,如:jar、war
    5. mvn install:将JAR文件安装到本地Maven仓库(通常位于 ~/.m2/repository 目录下),方便其他项目引用
    6. mvn deploy:将项目部署到远程仓库,通过pom.xml中的<distributionManagement>,找到setting.xml中的<servers>元素
    7. mvn clean install:组合命令,先清理项目,然后编译、测试并安装到本地仓库
    8. mvn clean package:组合命令,先清理项目,然后编译、测试并打包项目
    9. mvn test -DskipTests:组合命令,跳过测试直接编译打包
    10. mvn dependency:tree:组合命令,检查项目中使用的依赖关系及其版本
    11. mvn archetype:generate:组合命令,根据当前项目,生成新的Maven模版,在创建新的项目时候使用自己自定义的模版
  2. Maven工具执行流:

总结

Maven工具为目前项目构建使用率较高的工具,了解和掌握该工具能大大提高研发效率,请多多实践本文中的相关介绍。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3907.html

标签: maven打war包
分享给朋友:

“Maven解析让你从新手到高手(maven介绍)” 的相关文章

Ubuntu 24.10发行版登场:Linux 6.11内核、GNOME 47桌面环境

IT之家 10 月 11 日消息,Canonical 昨日发布新闻稿,正式推出代号为 Oracular Oriole 的 Ubuntu 24.10 发行版。新版在内核方面升级到最新 6.11 版本,并采用 GNOME 47 桌面环境。Ubuntu 24.10 发行版调整了内核策略,开始选择最新的上游...

「2022」打算跳槽涨薪,必问面试题及答案——VUE篇

1、为什么选择VUE,解决了什么问题?vue.js 正如官网所说的,是一套构建用户界面的渐进式框架。与其它重量级框架不同的是,vue 被设计为可以自底向上逐层应用。vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另外一方面,当与现代化工具链以及各种支持类库结合使用时,vu...

79.idea中git合并分支操作分享

文章目录前言1.fetch的操作2.合并最新代码到当前的开发分支3.解决冲突4.分支合并:5.完成代码合并总结前言git的操作在日产的工作中也非常重要,团队化的代码管理,每次如果代码被别人覆盖或者自己的代码不能提交到服务器那是灾难性的结果,本篇进行一篇分享来总结下idea中git的操作帮助java开...

GitLab 14.6发布,优化Geo高可用,安全更新等

昨天,GitLab官方按照管理发布了有一个月度版本GitLab 14.6的发布,这也是本年度收官版本。14.6中在安全合规性方面,在Geo方面以及MD代码块一键复制等方便做了优化,另外还在UI图标方面发布了一套全新的图标。详细情况请和虫虫一起学习。GitLab 14.6主要改进使用 Geo 实现无缝...

理解virt、res、shr之间的关系(linux系统篇)

前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存。这里我们可以看到VIRT、RES和SHR三个重要的指标,他们分别代表什么意思呢?这是本文需要跟大家一起探讨的问题。...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...