maven讲解

maven的诞生

Maven是一个积累知识的 Yiddish(意为"知识的积累者")词汇,起初它作为简化 Jakarta Turbine 项目中的构建过程的尝试而产生。该项目包含多个子项目,每个项目都有自己独立的 Ant 构建文件,并且它们之间略有不同。JAR 文件被检入到 CVS 版本控制系统中。我们希望有一种标准的方式来构建这些项目,明确定义项目的内容,轻松发布项目信息,并能够在多个项目之间共享 JAR 文件。就是maven诞生的环境。

也就是说Maven 是以简化构建过程为目的而创建的工具,通过标准化构建流程、定义项目结构、方便地发布项目信息以及共享依赖项等特性,帮助Java开发人员更高效地进行项目开发和管理。

maven的主要目标是什么

Maven 的主要目标是让开发人员在最短的时间内全面了解开发工作的状态。为了实现这个目标,Maven 处理了以下几个方面的问题:

  1. 简化构建过程:Maven 通过一套标准化的构建生命周期和插件机制,使构建过程更加简单、易于维护和重复使用。
  2. 提供统一的构建系统:Maven 提供了一个通用的构建系统,它可以应用于任何类型的 Java 项目,并且可以与其他工具(如 Eclipse 和 IntelliJ IDEA)无缝集成。
  3. 提供高质量的项目信息:Maven 强制要求项目必须有清晰的结构定义、详细的文档和版本控制,并且可以生成各种报告,以帮助项目团队更好地理解和管理项目。
  4. 鼓励良好的开发实践:Maven 提供了一些工具和规范,如代码静态分析、单元测试、持续集成等,来帮助开发者采用更好的开发实践和规范化的代码风格。

Maven 主要旨在提供一个统一的项目构建和管理平台,帮助开发人员通过简单、标准化的方式来管理 Java 项目,并且提高开发效率和代码质量。

在idea中安装maven

具体的安装,可以按照这个文章使用,IDEA集成Maven环境

在idea中使用maven

在 IntelliJ IDEA 中使用 Maven 非常方便。以下是在 IntelliJ IDEA 中使用 Maven 的基本步骤:

  1. 打开 IntelliJ IDEA,并在欢迎界面选择 "Open" 或点击菜单栏的 "File" -> "Open" 打开您的项目文件夹,确保项目中包含了 pom.xml 文件。
  2. 如果您的项目是一个空白项目,可以选择 "Create New Project" 并在项目类型中选择 "Maven" 来创建一个新的 Maven 项目。按照向导的步骤进行设置,并在最后一步中指定项目的基本信息和位置。
  3. 在 IntelliJ IDEA 的右侧工具栏中,您可以看到 "Maven Projects" 选项。点击它,将会显示出 Maven 项目的结构和相关的操作。
  4. 点击 "Reimport All Maven Projects" 图标,或者右键点击项目根目录并选择 "Maven" -> "Reimport",以确保 IntelliJ IDEA 更新项目的依赖和配置。
  5. 在 "Maven Projects" 窗口中,您可以展开 "Lifecycle"、"Plugins"、"Dependencies" 等节点,执行相应的操作,比如执行 Maven 生命周期中的特定阶段、运行插件、查看和管理依赖关系。
  6. 如果您需要运行 Maven 命令,可以在 "Maven Projects" 窗口顶部的输入框中直接输入命令,比如 "clean install",然后按下回车键执行。

引入依赖

当我们新建了一个maven项目后我们的项目里就会有一个xml文件,在这里我们可以引入各种各样的依赖。

引入的方式是使用<dependency>标签

例如

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.example</groupId>
     <artifactId>untitled</artifactId>
     <version>1.0-SNAPSHOT</version>
 ​
     <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
     </properties>
 ​
     <dependencies>
         <!-- 添加所需的依赖项 -->
         <dependency>
             <groupId>com.example</groupId>
             <artifactId>example-library</artifactId>
             <version>1.0.0</version>
         </dependency>
     </dependencies>
 ​
 </project>
 ​

在上述示例中,我们在 <dependencies> 标签内添加了一个示例依赖项 com.example:example-library:1.0.0。您可以将其替换为您实际需要的依赖项的坐标。

引入依赖的主要优点包括:

  1. 代码复用:通过引入依赖,您可以直接使用其他开发者或组织提供的功能丰富、经过测试的库和框架,避免重复编写相同的代码。这样可以显著提高开发效率,并减少出错的可能性。
  2. 提供常用功能:许多依赖提供了常用而且经过优化的功能,例如数据库操作、网络请求、身份验证等。通过引入这些依赖,您可以快速地在项目中使用这些功能,而不必从头开始实现。
  3. 安全性和稳定性:流行的开源依赖通常有一个活跃的社区和贡献者群体,他们致力于维护和改进这些依赖。这意味着这些依赖往往会得到及时的安全更新和错误修复,提供更高的安全性和稳定性。
  4. 社区支持:使用广泛的依赖项通常有一个活跃的开发者社区,您可以从中获取帮助、解决问题和分享经验。这种社区支持可以加快解决问题的速度,并使您的开发过程更加顺利。
  5. 可扩展性:通过引入依赖项,您可以将项目打造成一个模块化的架构,便于添加和更换不同的功能模块。这样可以为项目的未来发展提供更大的灵活性和可扩展性。

总的来说,引入依赖可以提高开发效率、降低开发成本,并帮助您构建高质量、安全可靠的应用程序。然而,需要注意的是,选择合适的依赖和版本管理是至关重要的,以确保依赖的质量和与项目的兼容性。

我们可以在maven里面看到引入的依赖,例如:

什么是生命周期

Clean Lifecycle(清理生命周期)是 Maven 构建生命周期中的一个阶段,用于在进行实际构建之前执行一些清理工作。它包含三个阶段:

  1. pre-clean(预清理)阶段:在执行 clean 阶段之前运行。它可以用于执行在清理之前需要完成的任务,比如删除临时文件或备份旧文件等。这个阶段通常用于清理以前构建留下的任何垃圾或不必要的文件。
  2. clean(清理)阶段:在执行 pre-clean 阶段后立即运行。这个阶段的目标是将构建过程产生的所有文件删除,以保持项目目录的干净状态。它会删除先前构建生成的目标文件、编译的类文件和其他生成的文件。
  3. post-clean(后清理)阶段:在执行 clean 阶段之后立即运行。它可以用于执行在清理之后需要完成的任务,比如重新生成缓存文件或清理临时目录等。这个阶段通常用于清理或恢复清理操作可能遗漏的其他资源。

Default Lifecycle(默认生命周期)是 Maven 构建生命周期中的核心部分,涵盖了编译、测试、打包、部署等一系列常用的构建任务。下面是其中一些比较重要和常用的阶段:

  1. compile(编译)阶段:编译项目的源代码并生成编译后的类文件。
  2. test-compile(测试编译)阶段:编译项目的测试源代码。
  3. test(测试)阶段:使用适当的单元测试框架运行项目的测试代码,这些测试代码不会被打包或部署。
  4. package(打包)阶段:将项目的编译结果打包成可发布的格式,例如 JAR(Java Archive)文件。
  5. install(安装)阶段:将项目的构建结果安装到本地 Maven 仓库,以供其他项目依赖使用。
  6. deploy(部署)阶段:将最终的构建产物复制到远程的 Maven 仓库,以便与其他开发人员共享和使用。

最下面的dependencies可以直观的展示依赖之间的关系

工程的依赖继承

Maven工程之间,A 工程继承 B 工程

  • B 工程:父工程
  • A 工程:子工程

本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置

在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。

它的背景是:

  • 对一个比较大型的项目进行了模块拆分。
  • 一个 project 下面,创建了很多个 module。
  • 每一个 module 都需要配置自己的依赖信息。

它背后的需求是:

  • 在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。
  • 使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
  • 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包 ;又能够将以往的经验沉淀下来,节约时间和精力。

如果您想在 Maven 的多模块工程中使用依赖继承,可以按照以下步骤进行操作:

  1. 在父模块的 pom.xml 文件中定义需要共享的依赖。例如,添加以下依赖配置:

    注意:只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程,所以可以将生成的 src 目录删除。

xml 复制代码
 <!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
 <packaging>pom</packaging>
 ​
 <dependencies>
   <dependency>
     <groupId>com.example</groupId>
     <artifactId>library1</artifactId>
     <version>1.0.0</version>
   </dependency>
   <dependency>
     <groupId>com.example</groupId>
     <artifactId>library2</artifactId>
     <version>2.0.0</version>
   </dependency>
 </dependencies>

2.创建子模块,在子模块的目录下创建一个新的目录,并在该目录下初始化一个新的 Maven 项目。这可以通过执行以下命令完成:

3.在子模块的 pom.xml 文件中添加 <parent> 元素,指定父模块。例如:

xml 复制代码
 <parent>
   <groupId>com.example</groupId>
   <artifactId>parent-project</artifactId>
   <version>1.0.0</version>
 </parent>

4.在子模块的 pom.xml 文件中,可以继续添加其他子模块特有的依赖。例如:

xml 复制代码
 <dependencies>
   <dependency>
     <groupId>com.example</groupId>
     <artifactId>submodule-specific-library</artifactId>
     <version>1.0.0</version>
   </dependency>
 </dependencies>

重复步骤2-4,为其他子模块也进行相应的设置。

通过以上步骤,父模块的依赖配置将被继承到各个子模块中,子模块只需要关注自身特有的依赖配置。当执行 Maven 构建命令时,Maven 将自动处理依赖下载和管理。

相关推荐
计算机学姐11 分钟前
基于SpringBoot+Vue的高校门禁管理系统
java·vue.js·spring boot·后端·spring·intellij-idea·mybatis
大熊程序猿16 分钟前
go 安装依赖超时
开发语言·后端·golang
计算机学姐1 小时前
基于SpringBoot+Vue的宠物医院管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis
JosieBook2 小时前
【.NET全栈】ASP.NET实战—基于ASP.NET的求职系统设计与实现
后端·asp.net·.net
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS教师工作量管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
AskHarries2 小时前
Spring Boot集成LangChain来实现Rag应用
java·spring boot·后端
黄俊懿2 小时前
【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器
java·分布式·后端·spring cloud·微服务·架构·手写源码
Xua30553 小时前
浅谈Spring Cloud:OpenFeign
后端·spring·spring cloud
蓝染-惣右介4 小时前
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
java·前端·后端·vue·springboot
齐 飞4 小时前
Java接口和抽象类的区别
java·笔记·后端