Maven学习(一):简介&环境搭建

本文详细介绍了Maven的安装配置、项目基本结构及多模块管理。从创建Maven项目到配置本地仓库,再到理解POM.xml的重要配置项,逐步解析Maven在Java开发中的作用。通过实例演示了如何创建父子模块项目,强调了Maven在依赖管理和构建过程中的核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网

写作背景

初次接触到Maven已经是N年前,最开始写项目时还是采用将jar放到项目lib文件夹中的方式去使用,后来公司采用了Maven,也就开始学习了,不过对Maven的印象仅仅是停留在使用Maven去下载jar以及对项目结构的管理。这次来到新公司第一个项目就是转换release小项目,一开始想要做成Maven插件的方式,但是我不会,所以就降低了难度。再后来第二个项目中应用了各种maven插件,也不知道他们的用法,于是打算从头把maven学习一下

什么是maven

maven是一个意第绪语单词,含义大致为知识的累加,最开始是作为简化Jakarta Turbine项目所做的尝试。这些项目每一个都有自己的Ant构建文件,但是却只有很小的区别,但却要每个项目都写一次。于是开发人员就想要创造出一个构建项目的标准方式、一个关于项目构成的清晰定义,一个发布项目信息的简单方式以及一个能够在多个项目中共享JAR的方式。
发展的结果就是一个能够用来构建和管理任何Java项目,并能够减轻Java开发者的工作的一个工具,这就是maven。

在平时开发中我们使用到最多的就是Maven对于jar的管理以及对于项目结构的管理

快速入门

安装与配置

下载

以windows平台为例,首先进入Maven下载地址
选择适合自己系统的版本,笔者这里为选择apache-maven-3.8.1-bin.zip,之后解压到自定义目录
这里为``

配置环境变量

  1. 进入环境变量配置窗口
    类似与配置JDK,我们需要配置Maven的环境变量
    桌面右键此电脑,选择属性,点击右侧高级系统设置,弹出的窗口中点击环境变量
    在这里插入图片描述
  2. 创建MAVEN环境变量
    点击下方系统变量中的新建按钮,变量名填写M2_HOME(一般Maven 2.0之后都用M2_HOME而不是MAVEN_HOME),变量值填写Maven的路径,点击确定
    在这里插入图片描述
  3. 添加M2_HOME至PATH
    在这里插入图片描述
  4. 测试是否生效
    打开命令行,输入
mvn --version

在这里插入图片描述
如果可以输出版本信息,则证明配置成功

设置本地仓库

  1. 创建本地仓库文件夹
    Maven会负责对我们平时用到的jar进行管理,默认会在${user.home}\.m2\repository中进行保存,这里我们不想再C盘保存而是使用自定义路径保存,此时需要创建一个文件夹来存放jar,如:E:\tools\maven\repository

  2. 修改Maven配置文件的本地仓库路径
    进入M2_HOME/conf文件夹,可以看到Maven的配置文件setting.xml,编辑该文件,可以看到根标签<settings>后的被注释的<localRepository>标签,此标签作用为配置本地仓库。我们需要编写如下配置

<localRepository>E:\tools\maven\repository</localRepository>

至此,Maven简单配置就到此完毕

Maven项目基本结构

在自定义目录创建一个学习文件夹,如我这里为E:\workspace\maven-study
使用命令行或类似工具进入该文件夹
执行命令如下命令

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

该命令是使用archetype插件中generategoal去生成项目,后边是一些参数,等待命令完毕之后会看到创建了一个maven项目,它的结构为
在这里插入图片描述
这是Maven项目的标准结构:

  • src/main/java目录存放的是工程的的源代码
  • src/test/java目录存放的是单元测试源代码
  • pom.xmlMaven中最重要最核心的配置文件,全称为Project Object Model,即项目对象模型,里边描述了模块之间的关系、jar的依赖,插件的依赖等

其中还有几个路径也需要我们记住

  • src/main/resources目录存放了工程的资源文件,如.properties.yaml.xml等文件,也就是非.java文件
  • src/test/resources目录存放了单元测试用的资源文件
  • ``

使用IDEA创建一个Maven项目

点击IDEA菜单栏中的File->New->Project...,弹出的窗口中选择Maven,右侧勾选Create from archetype,下方往下滑,选择org.apache.maven.archetypes:maven-archetype-quickstart,点击Next按钮
在这里插入图片描述
下一个Maven基本设置窗口中修改项目名称,这里为maven-demo,点击Next
在这里插入图片描述
下一个窗口要对Maven进行设置

  • Maven home directory填写Maven的安装路径,也可以使用默认的IDEA自带的maven
  • User Setting file选择Maven的配置文件,即M2_HOME/conf/setting.xml
  • Local Repository填写本地仓库的路径
    在这里插入图片描述
    点击Finish,等待程序创建完毕
    在这里插入图片描述

多模块Maven项目

有时候一个项目比较复杂,可能需要多个可单独开发/部署的模块,以便每个模块都可以打包成jar/war供其他程序应用,或能够单独部署,那么这时候就可以考虑多模块Maven项目。比如我现在想要开发一款音乐软件,需要有一款免费版的,提供基础的功能,需要单独部署。还需要提供一款高级VIP版,除了基础功能以外,还需要提供一些诸如去广告、支持自定义头像、提供个性化菜单等功能,也需要单独部署。两个模块都隶属于一个应用,而且部分基础功能都相同,那么我们就可以按照如下结构定义该项目。
在这里插入图片描述

  • music-parent:一个总项目,也可以称为父模块,用来组织子模块。
  • music-core:核心模块,包含通用的方法以及配置等
  • music-standard:用来提供一个可用的基础免费版
  • music-advanced:用来提供一个可用的高级收费版

创建父模块

首先创建music-parent项目,点击菜单栏File->New->Project,弹出的窗口中选择Maven,右侧勾选Create from archetype,下方选择org.apache.maven.archetypes:maven-archetype-quickstart,点击Next
在这里插入图片描述
在第二个窗口中填写项目信息,可以根据自己的情况填写,其中GroupIdArtifactIdVersion先不用理解什么意思,将ArtifactIdName填写为music-parent,之后点击next
在这里插入图片描述
确认好Maven配置信息后直接点Finish
等待Maven创建项目完毕,至此父模块就创建完毕了
在这里插入图片描述

创建子模块

接下来我们来创建music-core模块。
点击菜单栏File->New->Module...

在这里插入图片描述
像创建父模块一样,选择Maven->org.apache.maven.archetypes:maven-archetype-quickstart,点击Next
在第二个窗口中确认parentmusic-parent,然后接下来修改模块信息,如下图所示
在这里插入图片描述
最后第三个窗口直接点击Finish,等待Maven执行结束,至此第一个子模块就创建好了
接下来仿照该模块的创建方式,创建其他的两个模块music-standardmusic-advanced
初步的项目结构如下图所示

在这里插入图片描述
但是到这里并没有配置结束,我们先将项目放一下,学习一些其他知识再来优化配置项。

POM

观察我们创建的项目就可以发现,无论是父模块还是子模块,都包含一个pom.xml配置文件,接下来我们将要学习POM的相关知识。

项目对象模型(Project Object Model)也成为POM,是Maven项目的基本单位
POM是以.xml配置文件的形式存在于项目中的,它包含了项目信息以及构建项目的配置详情。当项目去执行一个任务或目标时,Maven会在当前目录寻找POM并且读取信息以及配置,最后去执行相应的功能。
POM可以指定配置信息,如项目的依赖,插件等,也可以制定项目的信息,如版本、描述,开发人员等

最小POM配置项

POM至少应该包含如下内容

  • project: 根标签
  • modelVersion:模型版本,现在都是4.0.0
  • groupId:项目所属组的ID,可以理解为项目所属的公司、机构、个人的名称/网站倒叙 + 项目所属租名,如org.springframework.bootcom.google.guava
    其中spring的网站为http://springframework.org,与现在的http://spring.io通用,倒过来就是org.springframework,项目为spring boot所属组名为boot,所以完整的groupIdorg.springframework.bootguava也同理
  • artifactIdartifact意为制品,可以理解为这个项目的名称,表明这个项目的核心功能。如spring-corespring-contextspring-bean
  • version:该groupartifact的版本
    其中groupIdartifactId以及version这三个值组合在一起就构成了项目的全限定名,采用<groupId>:<artifactId>:<version>

比如我们刚才创建的简单Mavendemo中自动创建的POM如下

在这里插入图片描述
我们将不需要的配置删掉,只留下最低配置

这个POM描述了该项目的信息
首先是一个根标签<project>;接下来值是固定4.0.0<modelVersion>标签;<groupId>表明该项目所属的机构/个人以及group为org.example;<artifactId>标签说明了该项目的名称;<version>表明了该项目的版本。artifact的全限定名为org.example:maven-demo:1.0-SNAPSHOT

修改多模块配置

远程仓库

生命周期

名词

GOAL:目标
artifact:可以理解为项目或者制品,为了防止翻译或者理解有偏差,文章将直接使用artifact而不是中文翻译后的单词。
dependency:依赖,表明该项目/模块除了自己的源代码之外,还需要哪些第三方jar或该项目的其他模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值