首页 > 其他分享 >Maven基础

Maven基础

时间:2023-07-27 20:24:09浏览次数:38  
标签:文件 插件 依赖 仓库 基础 Maven 构建

一、Maven仓库

1.1 三种类型Maven仓库

本地(local)
  本地仓库是机器上的一个文件夹,它在你第一次运行任何 maven 命令的时候创建,当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。

  Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository>C:/MyLocalRepository</localRepository>
</settings>

中央(central)
  中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

要浏览中央仓库的内容,maven 社区提供了一个 URL:Http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

远程(remote)
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

1.2 Maven依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

  1. 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  2. 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
  3. 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  4. 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

1.3 外部依赖

  当然,如果在远程仓库和中央仓库中,依然无法找到依赖,也可以通过外部依赖解决,即在你自己的本地工程中添加 lib 文件夹,复制任何 jar 文件到 lib 文件夹下,将这个外部依赖添加到对应的pom.xml 中,添加依赖时使用<systemPath>指定路径。

<dependencies>
   <dependency>
      <groupId>ldapjdk</groupId>
      <artifactId>ldapjdk</artifactId>
      <scope>system</scope>
      <version>1.0</version>
      <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
   </dependency>
</dependencies>
  • 外部依赖(library jar location)能够像其他依赖一样在 pom.xml 中配置。
  • 指定 groupId 为 library 的名称。
  • 指定 artifactId 为 library 的名称。
  • 指定作用域(scope)为system。
  • 指定相对于工程位置的系统路径。

二、Maven的构建过程

Maven的构建步骤:

  1. 解析POM文件:Maven会读取项目根目录下的pom.xml文件,并解析其中的配置信息,包括依赖库、插件、构建配置等。

  2. 下载依赖库:Maven会根据pom.xml文件中声明的依赖库信息,从Maven仓库或其他远程仓库中下载依赖库,并存储到本地仓库中。如果本地仓库中已经存在相应的依赖库,则不会再次下载。

  3. 执行构建插件:Maven会根据pom.xml文件中声明的构建插件,执行相应的构建任务,例如编译Java代码、运行测试、打包等。

  4. 打包:Maven会根据pom.xml文件中声明的打包方式,将构建结果打包成相应的格式,例如JAR、WAR等。

  5. 安装到本地仓库:Maven会将打包结果安装到本地仓库中,以便其他项目可以引用。

  6. 部署到远程仓库:如果需要将构建结果部署到远程仓库中,Maven会根据pom.xml文件中声明的仓库信息,将构建结果上传到远程仓库中。

  Maven的构建原理是基于POM文件和插件机制。在执行构建过程中,Maven会根据pom.xml文件中声明的插件,执行相应的构建任务。通过插件机制,Maven可以支持各种不同的构建任务,例如编译Java代码、运行测试、打包等。Maven提供了一些常用的构建插件,例如Maven Compiler Plugin、Maven Surefire Plugin等,同时也支持自定义插件。

  Maven的构建过程是基于Java虚拟机的。Maven本身是用Java语言编写的,因此在运行Maven时需要先启动Java虚拟机。在执行构建过程中,Maven会调用Java编译器、JUnit测试框架等Java工具和库。

  但Maven不仅仅对Java虚拟机打包工程的一种包装,它是一个基于项目对象模型(Project Object Model,POM)的构建工具,可以管理项目的依赖、构建、测试、打包等各个方面,其功能在于:

  1. 依赖管理:Maven可以自动下载和管理项目所依赖的库文件,避免手动下载和管理依赖库的麻烦。

  2. 构建管理:Maven可以自动执行项目的构建过程,包括编译、测试、打包等,避免手动执行构建过程的繁琐。

  3. 插件管理:Maven提供了丰富的插件,可以扩展和定制项目的构建过程,例如执行代码质量检查、生成文档等。

  4. 多模块管理:Maven可以管理多个模块的依赖关系,方便管理大型项目。

  5. 统一构建:Maven可以统一管理项目的构建过程,使得不同项目的构建过程更加一致和规范。

标签:文件,插件,依赖,仓库,基础,Maven,构建
From: https://www.cnblogs.com/wzq-blogs/p/17560543.html

相关文章

  • Maven
    day01-Maven安装.Maven整合SSH什么是maven?它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建使用maven的好处?能够集中管理jar包提供一键构建maven的依赖管理坐标groupId:一般用包名(域名反写)来表示,表示项目是由哪个组织开发的,类似于籍贯artifactId:一般是项目的......
  • Python基础day54 Django2
    配置文件的介绍#注册应用的INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.......
  • Cache(十):面向对象基础 Cache(十一):面向对象开发
    常规概念都是一些基础概念,在学校学过很多遍了              事务 Cache面向对象的crud  cache110.40.52......
  • Linux基础—vmvare安装及centos7安装
    Linux基础#https://zhuanlan.zhihu.com/p/429509333#一什么是操作系统OperatingSystem(操作系统)简称OSWindows,MacOS,Linux都是操作系统#二什么是BootLoader在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从......
  • 6、编程基础-控制器编程
    控制器编程下页介绍如何编写控制器代码。尽管最初专注于C,但大多数相关和非语言特定的细节已被翻译成C++、Java、Python和MATLAB。要更深入地了解其他语言中的等效函数/方法,请检查节点和API函数以及C++/Java/Python。HelloWorld例子c语言#include<webots/robot.h>#include......
  • 基础算法思想与搜索枚举
    位运算常用运算符按位与&按位或|按位异或^取反~左移<<右移>>非负整数原码反码补码都一样!运算符优先级不清楚就打括号!C++运算符优先级应用场景用二进制位表示元素的存在情况题目要求进行位运算获取二进制的某一位intgetBit(inta,intb){return(......
  • Java基础和MySQL
    Java基础==和equals的区别==比较的是值是否相等。==作用于基本数据类,他比较的是内容==作用于引用数据类型,比较的是地址值equals比较的是对象是否是同一个对象,比较的是对象的内容equals()方法存在于Object类中,在没有重写之前和==是一样,也是比较的是引用数据类型的地址......
  • 智能制造之路—从0开始打造一套轻量级MOM平台之基础平台搭建(Linux部署)
    一、前言前面我们选定了Admin.net来搭建我们的MOM快速开发平台,本章主要描述.NET6平台的Linux部署,以及记录搭建过程中坑。本次搭建我们选择某云的轻量应用服务器,系统选择CentOS7.6,数据库使用Mysql。参考配置如下: 二、搭建Linux管理工具系统搭建完毕,我们使用宝塔来管理linux......
  • 网络基础知识
    36张图,一次性补全网络基础知识!民工哥技术之路专注系统、Java后端、架构设计、微服务、集群、中间件等开源技术分享(后台回复1024免费赠送资源),关注我!一同成长!380篇原创内容公众号OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作......
  • Js基础语法
    操作DOM节点例如:fuctiona(){//获取某个标签varnode=documrnt.getElementById("node");//获取标签里的内容(包括子标签和文本)varhtm=node.innerHTML;alert(htm);//修改该节点里的内容node.innerHTML="<p>修改后的内容</p>";} ......