Maven 是一款为 Java 项目构建管理、依赖管理的工具,使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
通过配置maven工程的pom文件,可以将我们项目需要第三方库(依赖),如Druid连接池、MySQL数据库驱动等下载到我们的项目中来
Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。
Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。
GAVP是指GroupId、ArtifactId、Version、Packaging等四个属性,其中前三个是必要的,这四个属性主要用于在Maven仓库中为每个项目做一个标识,方便后期项目之间相互引用依赖等。
1:GroupId:格式为com.{公司/BU}.业务线.[子业务线],最多4级。例如:com.taobao.tdd。
2:ArtifactId:格式为产品线名-模块名。语义不重复不遗漏,先到仓库中心去查证一下。例如:tc-client
3:Version:版本号,格式推荐为主版本号.次版本号.修订号。例如:初始→1.0.0,调整模块2.0.0,修bug→1.0.1,功能调整→1.1.0等。
4:Packaging:指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型。
<groupId>com.zjr</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
在pom文件下可以的标签下配置需要导入的依赖,可以通过里面定义属性的方式去同意控制版本(作用类似与C语言中define的参数,只是进行字符替换)
<properties>
<!-- 定义了版本信息,放在名为jackson.version的属性中-->
<jackson.verson>2.16.0</jackson.verson>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<!-- 使用定义的Jackson.version属性-->
<version>${jackson.verson}</version>
</dependency>
</dependencies>
</project>
Maven提供了一套标准化的构建流程,包括编译、测试、打包、发布等,使用简单的命令就能完成项目的构建。
1:自动化构建:Maven能够自动化构建项目,通过定义好的生命周期和插件,自动完成项目的编译、测试、打包、部署等过程,减少了手动操作。
2:丰富的插件支持:Maven有丰富的插件支持,可以方便地扩展和定制构建过程,满足不同的构建需求。
版本管理:Maven能够方便地管理项目的版本,通过版本号的管理,可以方便地跟踪和回溯项目的历史版本。
Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。注意父工程打包方式为pom,子工程要用来指定所继承的父工程,优点如下
父工程配置如下
<!-- 聚合,对项目构建简化,并且优化构建顺序-->
<!-- 一般构建和聚合同时存在,但是若不想子模块被父工程统一构建可不用配置-->
<modules>
<!-- 统一构建管理的两个子工程-->
<module>sonA</module>
<module>sonB</module>
</modules>
<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程(该工程并没有导入一下依赖,而是对子工程依赖的规范化) -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<!-- 版本使用引用值-->
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程如下
<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
<!-- 父工程的坐标 -->
<groupId>com.zjr</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 子工程的坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
<!-- <groupId>com.atguigu.maven</groupId> -->
<artifactId>sonA</artifactId>
<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉,由父工程决定。-->
<!-- 若本工程重新规定版本号,则父工程版本被覆盖。-->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>
<!-- 聚合,对项目构建简化,并且优化构建顺序-->
<!-- 一般构建和聚合同时存在,但是若不想子模块被父工程统一构建可不用配置-->
<modules>
<!-- 统一构建管理的两个子工程-->
<module>sonA</module>
<module>sonB</module>
</modules>
此文章参考了wolai