新手Maven入门(一)

Mavenue介绍和基本概念

  • 一、什么是Maven
    • 1.1 Maven的组成
    • 1.2 安装和配置Maven
      • 1.2.1 下载
      • 1.2.2 安装
  • 二、Maven 的基本概念
    • 2.1 标准的目录结构
    • 2.2 POM 大纲
      • 2.2.1 pom大纲展示
    • 2.3 构件
      • 2.3.1 什么是maven的构建
    • 2.4 POM 文件的用例
    • 2.5 GAV 坐标
  • 三、依赖

一、什么是Maven

Maven 是一种用来管理 Java 项目的工具,但不是那种用来管理资源规划和调度的工具。它处理的是管理一个具体的项目所涉及的各种任务,如编译、测试、打包、文档以及分发。

1.1 Maven的组成

Maven 包括以下的几个部分。

  • 一组用于处理依赖管理、目录结构以及构建工作流的约定。基于这些约定实现的标准化可以极大地简化开发过程。例如,一个常用的目录结构使得开发者可以更加容易地跟上不熟悉的项目的节奏。
  • 一个用于项目配置的XML Schema:项目对象模型(Project Object Model),简称POM。每一个Maven项目都拥有一个POM文件 。
  • 一个委托外部组件来执行项目任务的插件架构。这简化了更新以及扩展 Maven 能力的过程。

1.2 安装和配置Maven

1.2.1 下载

可以从此处下载适合于你的系统的Maven tar.gz或者zip文件。

1.2.2 安装

安装非常简单:将下载内容解压到你选择的任意文件夹(我们称之为<安装目录>)中。

下来我们以apache-maven-3.8.6举例:

第一步: 将环境变量 M2_HOME 设置为指向<安装目录>apache-maven-3.8.6,这个环境变量将会告诉 Maven 在哪里能找到它的配置文件,conf\settings.xml;

第二步:将%M2_HOME%\bin(在 Linux 上是${M2_HOME}/bin)添加到你的执行路径,在这之后,在命令行执行 mvn 就能运行 Maven 了。

在编译和运行示例项目时,不需要修改默认配置。在首次执行mvn时,Maven会为你创建本地存储库,并从Maven中央存储库下载基本操作所需的大量JAR文件。最后,它会下载构建当前项目所需要的依赖项。settings.xml的详细信息可以在找到。

二、Maven 的基本概念

2.1 标准的目录结构

Maven定义了一个标准的项目目录结构 。(注意:并不是每种类型的项目都需要Maven的所有元素,很多都可以在必要的时候在POM文件中重写。)
在这里插入图片描述

2.2 POM 大纲

2.2.1 pom大纲展示

<project>     //根元素

  <groupId/>
  <artifactId/> //唯一地定义一个Maven 项目的值 
  <version/>
  
  <packaging/>  //该项目所产生的构件的类型;默认值是 jar
  <properties/> //在 POM 中所引用的符号
  <dependencies/> //构建当前项目所需要的其他 Maven 项目
  <build/> //构建该项目所需要执行的任务的配置
  <profiles/> //为不同的用例自定义POM的命名的配置
</project>

2.3 构件

2.3.1 什么是maven的构建

任何可以被 Maven 的坐标系统唯一标识的对象都一个 Maven 构件。大多数情况下,构件是构建 Maven 项目所生成的文件,如 JAR。但是,只包含其他 POM(该文件本身并不产生构件)使用的定义的 POM 文件也是 Maven 构件。Maven 构件的类型由其 POM 文件的元素指定。最常用的值是 pom、jar、ear、war 以及 maven-plugin。

2.4 POM 文件的用例

可以通过以下的方式来使用 POM 文件。

  • 默认的——用于构建一个构件。
  • 父 POM——提供一个由子项目继承的单个配置信息源——声明这个 POM 文件作为它们
    的元素的值。
  • 聚合器——用于构建一组声明为的项目,这些子项目位于其当前聚合器项目的文件夹中,每个都包含有它自己的 POM 文件。

作为父 POM 或者聚合器的 POM 文件的元素的值将是 pom。注意,一个 POM文件可能同时提供两项功能。

2.5 GAV 坐标

POM 定义了 5 种称为坐标的元素,用于标识 Maven 构件。首字母缩写 GAV 指的是必须始终指定的 3 个坐标、以及的首字母。

下面的坐标是按照它们在坐标表达式中出现的顺序列出的。

1、groupId : 是项目或者项目组的全局的唯一标识符。这通常是 Java 源代码中使用的全限定的 Java 包名。例如,io.netty、com.google。

2、artifactId: 用于标识和某个相关的不同的构件。例如,netty-all、netty-handler。

3、type: 是指和项目相关的主要构件的类型(对应于构件的 POM 文件中的值)。它的默认值是 jar。例如,pom、war、ear。

5、version: 标识了构件的版本。例如,1.1、2.0-SNAPSHOT、、4.1.9.Final。

6、classifier: >用于区分属于相同的 POM 但是却被以不同的方式构建的构件。例如,javadoc、sources、jdk16、jdk17。

例如:

  • 完整的坐标表达式具有的格式:artifactId:groupId:packaging:version:classifier
  • 包含 Netty 的所有组件的GAV 坐标:io.netty:netty-all:4.1.9.Final
  • POM 文件必须声明它所管理的构件的坐标。上面的组件具有如下坐标的项目:
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.92.Final</version>
            <packaging>jar</packaging>
  • 它的的构件具有以下格式的名称:artifactId-version.packaging
  • 在这种情况下,它将产生这个构件:netty-all-4.1.9.Final.jar

三、依赖

项目的依赖是指编译和执行它所需要的外部构件。在大多数情况下,项目的依赖项也会有它自己的依赖。我们称这些依赖为你的项目的传递依赖。一个复杂的项目可能会有一个深层级的依赖树;

Maven提供了各种用于帮助理解和管理它的工具。Maven的声明在POM的元素中:

<dependencies>
   <dependency>
     <groupId/>
     <artifactId/>
     <version/>
     <type/>
     <scope/>
    <systemPath/>
  </dependency>
...
</dependencies>

在声明中,GAV坐标总是必不可少的。。type以及scope元素对于那些值不分别是默认值jar和compile的依赖来说也是必需的。

举个例子:

    <dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.92.Final</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

元素可以具有以下值。

  • compile—编译和执行需要的(默认值)。
  • runtime—只有执行需要。
  • optional——不被引用了这个项目所产生的构件的其他项目,视为传递依赖。
  • provided——不会被包含在由这个 POM 产生的 WAR 文件的 WEB_INF/lib 目录中。
  • test——只有编译和测试的执行需要。
  • import——这将在后面的“依赖管理”一节进行讨论。
  • systemPath元素用来指定文件系统中的绝对位置。

Maven 用来管理项目依赖的方式,包括了一个用来存储和获取这些依赖的存储库协议,已经彻底地改变了在项目之间共享 JAR 文件的方式,从而有效地消除了项目的中每个开发人员都维护一个私有 lib 目录时经常会出现的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/30655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…

el-element-admin实现双路由菜单

需求&#xff1a; 1、输入用户名登录企业级菜单 2、点击企业级菜单中的首页&#xff0c;右边显示项目列表&#xff0c;点击某一行跳转到项目级菜单 注意&#xff1a; 企业级菜单和项目级菜单&#xff0c;后端分别给接口 具体实施&#xff1a; 1、点击面包靴首页的时候设置标记…

关于nginx,正向代理和反向代理是什么意思

为什么要使用nginx 很多公司会用到nginx做代理服务器&#xff0c;为什么用nginx&#xff0c;tomcat服务器不行吗&#xff1f; tomcat缺点&#xff1a;并发量小&#xff0c;用户使用的少 nginx&#xff1a;高并发&#xff0c;高性能&#xff0c;cpu、内存等资源消耗却非常低&…

06-揭开神秘面纱:Golang method的魅力解析

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;Golang基础 &#x1f4ac;Go&#xff08;又称Golang&#xff09;是由Google开发的开源编程语言。它结合了静态类型的安全性和动态语言的灵活性&#xff0c;拥有高效的并发编程能力和简洁的语法。G…

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【二】

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【一】 前面分享了这篇帖子&#xff0c;很多友友希望更新下新机型的基带替换方法。今天对其中做一些补充说明。由于安卓机型跨版本幅度较大。有的机型从出厂安卓8有可能官方目前已经更新到安卓12 13等等。所以任何的教…

Visual ChatGPT原理解读——大模型论文阅读笔记四

论文&#xff1a;https://arxiv.org/abs/2303.04671 代码&#xff1a;https://github.com/microsoft/TaskMatrix 一. 整体框架 如图所示&#xff0c;用户上传一张黄花的图像并输入一个复杂的语言指令“请根据该图像的预测深度生成一朵红花&#xff0c;然后逐步使其像卡通一样”…

5G技术学习——5GNR帧结构和空口资源

这里写目录标题 4G时域定义&#xff1a;资源划分 5GNR中时域 频域 与空域资源 循环前缀CP:背景和原理5G帧结构&#xff1a;基本框架5G slot分类 5G 频域资源5G频域资源基本概念信道带宽与传输带宽BWP定义及其应用场景 4G 时域定义&#xff1a; 帧&#xff1a;10ms&#xff0c;…

【使用Hystrix实现服务容错和熔断】—— 每天一点小知识

&#x1f4a7; 使用 H y s t r i x 实现服务容错和熔断 \color{#FF1493}{使用Hystrix实现服务容错和熔断} 使用Hystrix实现服务容错和熔断&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390…

SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计

文章目录 环境配置开发工具下载Vue前端模板前端项目启动前端说明及修改修改导航栏自定义菜单与子菜单增加导航标签功能 前端数据格式 B站视频讲解&#xff1a;2023全网最简单但实用的SpringBootVue前后端分离项目实战 不想看视频可浏览此文章笔记&#xff0c;比较详细 环境配置…

Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

青大数据结构【2020】【三分析计算】

关键字&#xff1a; 无相连通图、Prim算法最小生成树、哈希函数、线性探测法、平均查找长度 1.对于一个带权连通无向图G&#xff0c;可以采用Prim算法构造出从某个顶点v出发的最小生成树&#xff0c;问该最小生成树是否一定包含从顶点v到其他所有顶点的最短路径。如果回答是&a…

kafka 报错 - Cannot assign requested address

背景 在华为云服务器上跑了 zookeeper 和 kafka 的 broker&#xff0c;想内外网分流&#xff0c;重点就是做不到从外网去消费&#xff0c;比如用自己的 windows 笔记本去消费。 配置 server.properties 的 listener 为 broker 所在机子的的内网 IP 后&#xff0c;终于能 star…

Vulnhub项目:Aragog

1、靶机地址&#xff1a; HarryPotter: Aragog (1.0.2) ~ VulnHub 死亡圣器三部曲之第一部&#xff0c;Aragog是海格养的蜘蛛的名字&#xff0c; 并且又牵扯到了密室 2、渗透过程 确定靶机ip&#xff0c;攻击机ip&#xff0c;扫描靶机开放端口 只有22&#xff0c;80端口&a…

数学建模常用模型(一):灰色预测法

数学建模常用模型&#xff08;一&#xff09;&#xff1a;灰色预测法 灰色预测法是一种用于处理少量数据、数据质量较差或者缺乏历史数据的预测方法。它适用于一些非线性、非平稳的系统&#xff0c;尤其在短期预测和趋势分析方面有着广泛的应用。灰色预测法作为一种强大的数学…

辅助驾驶功能开发-功能算法篇(3)-ACC-弯道速度辅助

1、功能架构:ACC弯道速度辅助(CSA) 2、CSA功能控制 2.1 要求 2.1.1 CSA ASM:弯道速度辅助 1. 模式管理器:驾驶员应能够激活/关闭功能 应存在处理 CSA 功能的模式管理器。模式管理器由驾驶员输入和系统状态控制。 模式管理器有两个由 CSAStatus 定义的状态。状态转换定义…

RabbitMQ高阶使用消息推送

目录 1 从打车开始说起1.1 需要解决的问题1.2 消息推送 2 消息推送2.1 什么是消息推送2.2 方案介绍2.2.1 ajax短轮询2.2.2 长轮询2.2.3 WebSocket 2.3 WS实现消息推送2.3.1 架构介绍2.3.2 暂存数据2.3.2.1 什么是MongoDB2.3.2.2 插入数据2.3.2.3 查询数据 2.4.1 轮询任务2.4.1.…

软件工程导论期末急救包(上)

目录 什么是软件工程&#xff1f;它的目标和内容是什么&#xff1f; 软件文档作用及包含 软件过程模型 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 软件生存周期 需求分析阶段的基本任务是什么&#xff1f; 可行性研究的任务是什么&#xff1f; 软件是什…

vue+el-select下拉实现:全选、反选、清空功能

问题描述&#xff1a; el-select下拉框要求实现全选功能。具体功能包括&#xff1a; 当选择【全选】时&#xff0c;所有选项全部被勾选&#xff1b;当选择【反选】时&#xff0c;已选择选项变为未选择选项&#xff0c;未选项变为已选项当选择【清空】时&#xff0c;所有选项变…

带你用Python制作7个程序,让你感受到端午节的快乐

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 前言 程序1&#xff1a;制作粽子 程序2&#xff1a;龙舟比赛 程序3&#xff1a;艾草挂 程序4…

【人脸检测0】视频分解图片与图片合成视频

一,引言 目标:这小节主要通过两个demo熟悉视频分解图片与图片合成视频的OpenCV的应用 环境:python3.6+OpenCV3.3.1 二,示例 Demo1:视频分解图片 目标: 1.指定文件夹中读取视频文件 2.将视频文件分解为图片 3.将图片保存在指定文件夹中 # -*-coding:utf-8-*- #auth…