Maven小结

什么是Mavan?

Maven是一个流行的项目管理工具,用于管理Java项目的构建、依赖管理和项目信息管理。它利用项目对象模型(Project Object Model,POM)来描述项目的结构和配置信息,并提供一系列的插件和标准化的构建生命周期来实现项目的构建、测试、部署等任务。

下面是Maven的一些主要特点和功能:

依赖管理: Maven可以自动下载项目所需的依赖库,并且可以通过POM文件中的依赖描述来管理这些库的版本和依赖关系。

项目构建: Maven提供了一套标准的构建生命周期和构建阶段(如编译、测试、打包、部署等),开发者只需要简单地配置POM文件就可以执行这些构建任务。

插件机制: Maven通过插件机制来扩展其功能,开发者可以编写自定义的插件来实现特定的构建任务或者功能扩展。

标准化的项目结构: Maven鼓励使用一种标准化的项目结构,使得不同项目之间的结构更加统一,易于维护和管理。

集成测试: Maven支持集成各种测试框架,如JUnit、TestNG等,并提供了一套标准的测试生命周期来管理测试任务。

多模块支持: Maven支持多模块项目的构建,可以将一个大型项目拆分成多个模块,每个模块可以独立构建、测试和部署。

总的来说,Maven简化了Java项目的构建和管理过程,使得开发者可以更加专注于项目的开发而不是繁琐的配置和管理任务。

Maven的安装

1.1 下载maven

Maven的版本对应的jdk和发布日期:https://maven.apache.org/docs/history.html

在这里插入图片描述

1.2 安装: 解压到非中文目录

在这里插入图片描述

1.3配置环境变量

在这里插入图片描述

在这里插入图片描述
添加一个变量

变量名: MAVEN_HOME
值: maven安装目标的bin上级目录

在这里插入图片描述

在path中添加maven_home
在这里插入图片描述

%MAVEN_HOME%\bin

1.4检查是否配置成功

在cmd命令框下

mvn -v

在这里插入图片描述

这样我们就完成了Maven的安装

Maven的配置

Maven仓库

Maven仓库是存储Maven项目依赖库的地方,它可以分为两种类型:本地仓库和远程仓库。

本地仓库:
本地仓库位于开发者本地计算机上,用于存储项目的依赖库。当Maven构建项目时,它会首先搜索本地仓库以查找所需的依赖库。默认情况下,本地仓库位于用户主目录下的
.m2/repository 文件夹中,开发者可以通过修改Maven配置文件 settings.xml 来指定本地仓库的位置。

远程仓库: 远程仓库位于网络上的服务器上,用于存储项目的依赖库以及开发者上传的项目构件。远程仓库通常包括中央仓库(Maven Central
Repository)和其他第三方仓库。中央仓库是Maven社区维护的一个官方仓库,其中包含了大量常用的开源Java项目的依赖库。除了中央仓库,开发者还可以使用其他第三方仓库,如JCenter、Apache仓库等。在构建项目时,如果本地仓库中没有所需的依赖库,Maven会从远程仓库下载所需的依赖库到本地仓库中。

Maven通过POM文件中的依赖描述来管理项目的依赖关系,并根据这些依赖关系从本地仓库或者远程仓库中下载所需的依赖库。这种机制使得Maven项目的依赖管理变得简单而有效,开发者可以通过简单地配置POM文件来管理项目的依赖,而无需手动下载和管理依赖库。

本地仓库

在这里插入图片描述配置我们的本地仓库: 打开maven目录下的conf下的settings.xml文件 找到如图所示的部分 将它修改为我们想设定的本地仓库位置

配置idea

1.1在idea配置全局的maven配置

在这里插入图片描述

1.2选择”Settings”进行相关配置
在这里插入图片描述

1.3 配置maven
在这里插入图片描述

到此为止,已经大概安装好了Maven 可以进行简单的创建项目了

2 在Idea创建maven项目

2.1创建一个Maven项目也十分简单,选择”Create New Project"

在这里插入图片描述

2.2选择”maven”选项,创建一个maven项目
在这里插入图片描述

2.3 输入项目的groupId,ArtifactId,Version

在这里插入图片描述
这三个简称为 gav 也相当于这个Maven项目的文件目录坐标
填完后直接finish 这样就创建好了maven项目
在这里插入图片描述

我们可以如图看到src/main/java是放我们的主源代码,src/test/java 是放我们的测试源代码.
target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等。target里的所有内容都是maven构建的时候生成的,pom.xml文件就是我们项目的maven的核心文件,
它是指示 Maven 如何工作的元数据文件,每一个Maven项目在根目录下有一个pom.xml文件.

pom.xml

下面就是我们在创建maven项目时,所生成的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>org.csmf.helloworld</groupId>
  <artifactId>hello-world</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hello-world</name>
  <url>http://maven.apache.org</url>

  <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
  • 代码的第一行是XML头,指定了该xml文档的版本和编码方式。紧接着是project元素,project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素.

  • 根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0。

  • groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如你在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp。

  • artifactId定义了当前Maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world

  • version指定了Hello World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如升级为1.0、1.1-SNAPSHOT、1.1、2.0等等。

  • name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但我还是推荐为每个POM声明name,Maven产生的文档用。

  • url元素:项目主页的URL, Maven产生的文档用

  • properties元素是对项目的一些设置

  • project.build.sourceEncoding 设置项目源文件的编码

  • maven.compiler.source 设置编译源代码的jdk版本

  • maven.compiler.target: 设置生成jar/war使用的jdk版本

  • dependencies项目引入插件所需要的额外依赖

  • ​ dependency: 为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。

Maven 编写主代码

项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/main/java目录,我们遵循Maven的约定,创建该目录,然后在该目录下创建java源文件.

在这里插入图片描述

源文件的代码如下:

public class HelloWorld {
	public void sayHello(String world){
		System.out.println("hello: "+world);
	}
}
	这是一个简单的Java类,它有一个sayHello()方法,在控制台输出”hello:XXx””. 代码编写完毕后,我们删除编译输出文件,使用命令`clean`,我们使用Maven进行编译,使用命令`compile `,
	![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4017ba866b924dcaa3ec9dff9167f4cd.jpeg#pic_center)

其能够得到以下输出:
在这里插入图片描述
在这里插入图片描述
**注意:输出的信息中没有[error]**就说明编程通过

2.4 编写测试代码

*Maven项目中默认的测试代码目录是*src/test/java下的,当我们java的测试都是基于junit的单元测试,那也就是说,我们需要添加junit的依赖,我们在pom,xml文件添加了junit依赖,
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

当我们添加完依赖以后 需要刷新我们的maven
在这里插入图片描述
如果你的本地仓库没有 他就会帮你下载到你的本地仓库
测试用例编写完毕之后就可以调用Maven执行测试,运行 test
在这里插入图片描述

Maven常用命令:

mvn archetype:generate :创建 Maven 项目

mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn deploy:将jar包发布到远程仓库

mvn eclipse:eclipse :生成 Eclipse 项目文件

3继承与聚合

做面向对象编程的人都会觉得这是一个没意义的问题,是的,继承就是避免重复,maven的继承也是这样,它还有一个好处就是让项目更加安全.
我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用*spring*的时候,其核-心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入,我们是不是一直重复引入,这时就可以使用继承.

配置继承maven项目

1.需要创建一个父工程

注意:作为父模块的POM,其打包类型也必须为POM

在这里插入图片描述

父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
在这里插入图片描述

2.创建父工程下的子模块
在这里插入图片描述
3.同样的 也需要在子模块中声明对父模块的继承
在这里插入图片描述
4.依赖的继承

我们知道dependencies是可以被继承的,这个时候我们就想到让我们的发生了共用的依赖元素转移到parent中,这样我们又进一步的优化了配置。可是问题也随之而来,如果有一天我创建了一个新的模块,但是这个模块不需要这些parent的依赖,这时候如何处理?

​ 是的,maven的依赖管理就是来解决这个问题的增加一个新的元素:****dependencyManagement****从上面的列表中我们发现dependencyManagement也是可以被继承的,这恰恰满足了我们的需要,它既能够让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性

父项目的pom文件
在这里插入图片描述

子项目的pom文件
在这里插入图片描述

而下面的内容 也就是能够被继承的部分

可被继承的POM元素:

groupId:项目组ID,项目坐标的核心元素

version: 项目版本, 项目坐标的核心元素

description: 项目的描述信息

organization: 项目的组织信息

inceptionYear: 项目的创始年份

url: 项目的URL地址

developers: 项目开发者信息

contributors: 项目的贡献者信息

distributionManagement: 项目的部署配置

issueManagement: 项目的缺陷跟踪系统信息

ciManagement: 项目的持续集成系统信息

scm: 项目的版本控制系统信息

mailingLists: 项目的邮件列表信息

properties: 自定义的maven属性

dependencies: 项目的依赖配置

dependencyManagement: 项目的依赖管理配置

repositories: 项目的仓库配置

build: 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等

reporting: 包括项目的报告输出目录配置、报告插件配置等

3.2聚合

​ 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。所谓聚合,顾名思义,就是把多个模块或项目聚合到一起。

​ 我们就必须先建立一个聚合项目,而这个聚合项目必须满足如下几点要求:

  1. 该aggregator本身也做为一个Maven项目,它必须有自己的POM

  2. 它的打包方式必须为: pom

  3. 引入了新的元素:modules—module

  4. 版本:聚合模块的版本和被聚合模块版本一致

  5. relative path:每个module的值都是一个当前POM的相对目录

  6. 目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和
    module模块所处的目录 module相一致。

  7. 习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM

  8. 聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。

  9. 聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。

父工程 需要在它的pom文件中对它所包含的子模块进行聚合管理![
![](https://img-blog.csdnimg.cn/direct/2069c9190146432b8d486c9e6ded61a5.png

而 我们其他的各个子模块中 如果需要相互借用方法或者实体类等等 也可以在各自的子模块中 去聚合所需要的相关模块

总结

总的来说 :Maven是一个用于Java项目的强大的项目管理和构建工具。它提供了一种标准化的方式来构建、管理和发布Java项目,简化了项目的构建过程,并提供了丰富的功能和插件生态系统。以下是Maven的主要特点和功能总结:

项目对象模型(Project Object Model,POM): Maven使用POM描述项目的基本信息、依赖关系和构建配置。POM是一个XML文件,位于项目的根目录下,定义了项目的结构和构建过程。

依赖管理: Maven通过中央仓库和本地仓库来管理项目的依赖关系。开发者可以在POM文件中声明项目所依赖的库和版本,Maven会自动下载并管理这些依赖。

标准化的项目结构: Maven规定了标准的项目结构,包括源代码目录、资源目录、测试代码目录等。这种标准化的项目结构有助于项目的管理和维护,并使得项目更具可读性和可维护性。

生命周期和插件: Maven定义了一套标准的构建生命周期,包括清理、编译、测试、打包、部署等阶段。每个生命周期阶段都与一个或多个插件相关联,开发者可以通过配置插件来定制项目的构建过程。

自动化构建: Maven支持自动化构建,开发者只需执行简单的命令(如mvn clean install),Maven会自动完成项目的编译、测试、打包等任务,并生成相应的构建结果。

多模块项目支持: Maven支持多模块项目,可以将一个大型项目拆分为多个子模块,每个子模块都有自己的POM文件和构建配置。这种模块化的项目结构有助于项目的管理和协作开发。

插件生态系统: Maven拥有丰富的插件生态系统,开发者可以通过插件扩展Maven的功能,实现更多的定制化需求。常用的插件包括编译插件、测试插件、打包插件、部署插件等。

跨平台支持: Maven是基于Java开发的,可以在各种操作系统上运行,包括Windows、Linux、Mac等。

总的来说,Maven是一个功能强大、灵活性高、易于使用的项目管理和构建工具,广泛应用于Java项目的开发和构建过程中,为开发者提供了便捷、高效的项目管理和构建解决方案。

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值