当前位置: 首页 > news >正文

Maven快速上手笔记

之前学习Maven时留下的笔记,在这里做记录以便后续查看

一 Maven仓库的基本概念

对于Maven来说,仓库只分为两类:本地仓库和远程仓库。

当第一次运行maven命令的时候,需要网络连接,因为它需要从网上下载一些文件。那么它从哪里下载呢?它是从Maven默认的远程仓库下载的。这个远程仓库有Maven的核心插件和可供下载的jar文件。

当Maven根据坐标寻找构件的时候,它会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。

远程仓库分为三种:中央仓库,私服,其它仓库。

  • 中央仓库是默认配置下,Maven下载jar包的地方。
  • 私服是另一种特殊的远程仓库,为了节省带宽时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其它项目使用。
  • 一般来说,在maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库依赖文件。默认情况下,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。

二 Maven仓库地址

查看依赖版本使用情况及groupId等信息 https://mvnrepository.com/

三 配置文件

  • 配置本地仓库地址
<localRepository>D:\Program Files\Maven\repository</localRepository>
  • 配置下载镜像地址
<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors>

四 解读pom.xml


<!-- project 标签:根标签,表示对当前工程进行配置、管理 -->
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- modelVersion 标签:从Maven2开始就固定是4.0.0 --><!-- 代表当前pom.xml所采用的标签结构 --><modelVersion>4.0.0</modelVersion><!-- 坐标信息 --><!-- groupId 标签:坐标向量之一;代表公司或组织开发的某一个项目 --><groupId>com.atguigu.maven</groupId><!-- artifactId 标签:坐标向量之一;代表项目下的某一个模块 --><artifactId>demo</artifactId><!-- version 标签:坐标向量之一;代表当前模块的版本 --><version>0.0.1-SNAPSHOT</version><!-- packaging 标签:打包方式 --><!-- 取值 jar:生成jar包,说明这是一个java工程 --><!--取值 war:生成war包,说明这是一个web工程 --><!-- 取值pom:说明这个工程是用来管理其它工程的工程 --><packaging>jar<packaging><name>demo</name><!-- properties 标签:在maven中定义属性值 --><properties><!-- 在构建过程中读取源码时使用的字符集 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- dependencies 标签:配置具体依赖信息,可以包含多个dependency子标签 --><dependencies><!-- dependency 标签:配置一个具体的依赖信息 --><dependency><!-- 坐标信息:导入哪个jar包,就配置它的坐标信息即可 --><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- scope 标签:配置当前依赖的范围 --><scope>test</scope></dependency></dependencies>
</project>

五 Maven依赖的基本概念

依赖的基本配置

根元素project下的dependencies可以包含多个dependence元素,以声明多个依赖。每个依赖都应该包含以下元素:
1、groupId,artifactId,version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖
2、Type:依赖的类型,大部分情况下不需要声明。默认值为jar
3、Scope:依赖的范围(compile,test,provided,runtime,system)

  • compile:编译依赖范围
    如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效
    通常使用的第三方框架的jar包这样在项目实际运行时真正要用到的jar包都是以compile范围进行依赖的。比如SSM框架所需jar包
  • test:测试依赖范围
    使用此依赖范围的Maven依赖,只对于测试calsspath有效,在编译主代码或者运行项目的使用时将无法使用此依赖,典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要
    测试过程中使用的jar包,以test范围依赖进来,比如junit
  • provide:已提供依赖范围
    使用此范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)
    在开发过程中需要用到的”服务器上的jar包“通常以provide范围依赖进来。比如servlet-api、jsp-api。而这个范围的jar包之所有不在参与部署、不放进war包,就是避免和服务器上已有的同类jar包产生冲突,同时减轻服务器的负担。
  • runtime:运行时的依赖范围
    使用此依赖范围的Maven环境,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现。项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动
  • system:系统依赖范围
    该依赖与三种classpath的关系。和provided依赖范围完全一致。但是,使用system范围依赖时必须通过systemPath元素显示地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此该谨慎使用

4、Optional:标记依赖是否可选
5、Exclusions:用来排除传递性依赖

其它核心概念

声明周期

1、作用:
为了让构建过程自动化完成,Maven设定了三个生命周期,声明周期中的每一个环节对应构建过程中的一个操作。
2、三个声明周期

  • clean
    • 作用:清理操作相关
    • 环节:pre-clean、clean、post-clean
  • Site
    • 作用:生成站点相关
    • 环节: pre-site、site、post-site、deploy-site
  • Default
    • 作用:主要构建过程
    • 环节: validate、generate-sources、process-sources、generate-resources、process-resources 复制并处理资源文件,至目标目录,准备打包。
      compile 编译项目main目录下的源代码
      process-classes、generate-test-sources、process-test-sources、generate-test-resources、process-test-resources 复制并处理资源文件,至目标测试目录
      test-compile 编译测试源代码
      process-test-classes、test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
      prepare-package、package 接受编译好的代码,打包成可发布的格式,如jar
      pre-integration-test、integration-test、post-integeration-test、verify、install 将包安装至本地仓库,以其它项目依赖
      deploy将最终的包复制到远程仓库,以让其它开发人员共享;或者部署到服务器上运行

插件和目标

1、插件

Maven的核心程序仅仅负责宏观调度。不做具体工作。具体工作都是由Maven插件完成的。例如:编译就是由maven-compile-plugin-3.1.jar插件来执行的

2、目标

一个插件可以对应多个目标,而每一个目标都和生命周期中的某一个环节对应

Default生命周期中有compile和test-compile两个和编译相关的环节,这两个环节对应compile和test-compile两个目标而这两个目标都是由maven-compile-plugin-3.1.jar插件来执行的

http://www.dtcms.com/a/536742.html

相关文章:

  • 手机免费制作网站模板免费下载台州网站公司那里好
  • 企业网站哪家好网站流量超标
  • 钢结构网站建设网站建设必备
  • 数据分析综合应用实战:从统计分析到机器学习预测
  • 网站 源码 下载色无极网站正在建设中
  • 【测试理论和实践 2.测试概念】
  • 算法 day 36
  • 【论文阅读】图数据库 Survey: Graph Databases
  • 长沙优化网站关键词合肥政务新区建设局网站
  • 化学网站定制简网app工场怎么创app
  • 今天我们学习Linux架构中的Redis数据库基础
  • 网站商城系统教资报名网站设置
  • 引入实时 3D 渲染技术,地平线与 Unity 开启车载交互空间化时代
  • 用狸窝转换器转换视频后文件变大的问题排查
  • Ansible自动化部署Harbor私有仓库指南④
  • AI模型开发 | 基于AutoDL部署Deepseek OCR模型,从零打造OCR应用平台
  • 网站建设微金手指下拉15价目表app制作
  • 基于深度学习的户口本识别技术通过智能图像处理、文字定位和语义理解,实现99%以上的高精度识别
  • 在线视频教育网站开发公司注册资金最低多少
  • JVM学习第一章
  • Promise 详解
  • [nanoGPT] 性能与效率 | `torch.compile()` |`Flash Attention`|`混合精度训练`|`estimate_mfu`
  • 异常日志不打印堆栈?谈谈 JVM 的 Fast Throw
  • docker wordpressseo插件wordpress
  • 网站模板设计工具能引流的都有什么平台
  • CAD三维模型:超越形状的设计信息载体
  • RoboTwin 数据收集-翻译
  • 强对流天气临近预报技术发展趋势
  • 杭州专业网站设计策划给个免费的网站好人有好报
  • 百钱买百鸡问题