Maven(mvn)基础

news2024/12/28 6:05:06

Maven(mvn)基础

文章目录

  • Maven(mvn)基础
    • 传统项目管理状态分析
    • Maven是什么
    • Maven的作用
    • 下载与安装
      • 1.下载安装
      • 2.环境变量配置
    • Maven基础概念
      • 仓库
      • 坐标
      • 本地仓库配置
      • 全局setting与用户setting
    • 第一个Maven项目(手动)
      • Maven工程目录结构
      • Maven项目构建命令(基础)
    • 第一个Maven项目(IDEA自动版)
      • 配置Maven
      • 创建Maven项目
      • 用Maven创建Java
      • 用Maven创建web应用
      • pom中添加tomcat插件
    • pom默认配置项说明
    • 依赖管理
      • 依赖配置
      • 依赖传递
      • 可选依赖
      • 排除依赖
      • 依赖范围
      • 依赖范围传递性(了解)
    • 生命周期与插件
      • 构建项目生命周期
      • 插件

官网:Maven – Welcome to Apache Maven

官网


传统项目管理状态分析

  1. jar包不统一,jar包不兼容
  2. 工程升级维护过程操作繁琐

image-20230131134916422


Maven是什么

Maven本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

POM(Project Object Model):项目对象模型

image-20230131135837761

Maven的作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一开发结构:提供标准的、统一的项目结构

项目结构


下载与安装

1.下载安装

结构:

  • bin:运行项
  • boot:类加载框架
  • conf:配置内容
  • lib:Maven运行时所需要的所有Java类库

image-20230131144053880

2.环境变量配置

  • 依赖Java,需要配置JAVA_HOME
  • 设置maven自身的运行环境,需要配置MAVEN_HOME

a.环境变量:

  1. 新建系统变量,变量名:MAVEN_HOME,变量值:maven的路径
  2. 编辑path,新建项:%MAVEN_HOME%\bin

b.测试:

cmd下运行mvn,显示[INFO]项即可


Maven基础概念

仓库

仓库:用于存储资源,包含各种jar包

分类:

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源

  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源

    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

    私服的作用

    • 保存具有版权的资源,包含购买或自主研发的jar
      • 中央仓库中的jar都是开源的,不能存储具有版权的资源
    • 一定范围内共享资源,仅对内开放,不对外共享

仓库

坐标

坐标:Maven中的坐标用于描述仓库中资源的位置

maven仓库官网:Maven Repository: Search/Browse/Explore (mvnrepository.com)

maven坐标主要组成:

  • groupId:定义maven项目隶属的组织
  • artifactId:定义maven项目名(通常是模块名称,eg:SMS)
  • version:定义当前项目版本号
  • packaging:项目的打包方式

maven坐标的作用:

​ 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

本地仓库配置

  • maven启动后,会自动保存下载的资源到本地仓库

    • 默认位置(在xml文件中被注释部分)

      <localRepository>${user.home}/.m2/repository</localRepository>
      

      当前目录位置为登录用户所在目录的.m2文件夹中

    • 自定义位置

      <localRepository>F:\maven\repository</localRepository>
      

      当前目录为F:\maven\repository文件夹中

  • 镜像仓库配置(内部配置项顺序可颠倒)

          <mirrors>
              <!--配置具体的仓库下载镜像-->
            <mirror> 
                <!--此镜像的唯一标识,用来区分不同的mirror元素-->
                <id>alimaven</id> 
                <!--镜像名称-->
                <name>aliyun maven</name> 
                <!--镜像url-->
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
                <!--对哪种仓库进行镜像,简单来说就是代替哪个仓库-->
                <mirrorOf>central</mirrorOf>         
            </mirror> 
          </mirrors>
    

全局setting与用户setting

  • 全局setting定义了当前计算机中Maven的公共配置
  • 用户setting定义了当前用户的配置(当前用户有用户setting时,会覆盖全局setting),就像父类与子类的区别

第一个Maven项目(手动)

Maven工程目录结构

resources内放配置文件(main中与test中的配置文件可能会冲突,所以要分开放)

左侧java 右侧web

配置仓库

Maven项目构建命令(基础)

  • Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分开

    mvn compile #编译
    mvn clean #清理
    mvn test #测试
    mvn package #打包
    mvn install #安装到本地仓库


第一个Maven项目(IDEA自动版)

配置Maven

settings->Build,Execution,Deployment->Build Tools->Maven

image-20230201204313897

创建Maven项目

new project->Maven->选择sdk->设置项目名称以及坐标->finash

坐标上面有说明

image-20230201204702428

  • 工程样式,其他需求可自行新建文件夹,右键文件夹选择 Mark Directory as 可自行更改文件夹样式

image-20230201204801757

用Maven创建Java

new Module->勾选Create from archetype直接输quickstart->配置名称、坐标->配置maven路径->finash

image-20230201205341270

用Maven创建web应用

new Module->勾选Create from archetype直接输webapp->设置名称、坐标->设置maven路径->finash

image-20230201210632062image-20230201210745161

pom中添加tomcat插件

即前端tomcat不用再自己下载源文件了,直接配置即可

<!--构建-->
<build>
    <!--设置插件-->
    <plugins>
        <!--具体的插件配置-->
        <plugin>
            <!--相关的坐标-->
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <!--配置端口号跟路径 eg:端口号80  路径 /(空)-->
            <configuration>
            	<port>80</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

pom默认配置项说明

<!--    指定pom的模型版本-->
    <modelVersion>4.0.0</modelVersion>
<!--    打包方式,web工程打包为war Java工程打包为jar-->
    <packaging>pom</packaging>
<!--    组织id-->
    <groupId>com.example</groupId>
<!--    项目id(名称)-->
    <artifactId>springboot</artifactId>
<!--    版本号 release(完成版) ,snapshot(开发板)-->
    <version>0.0.1-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
	<dependencies>
        <!--具体的依赖  有的没有版本号version-->
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
        </dependency>
	</dependencies>
<!--parent用于引用父工程,此处引用spring boot 即从中央服务器下载spring boot文件-->
    <parent>
        <!--这是Spring Boot的父级依赖,这样当前的项目就是Spring Boot项目了。
            spring-boot-starter-parent 是一个特殊的starter,它用来提供相关的Maven默认依赖。
            使用它之后,常用的包依赖可以省去version标签。-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


依赖管理

依赖配置

  • 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

  • 格式参照 pom默认配置项说明

  • 使用dependencies与dependency进行依赖配置

依赖传递

  • 依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 依赖传递的冲突问题

    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

    注:声明优先中比较时两个资源的id不同,特殊优先中,比较的是两个id相同但版本号不同

image-20230201221605212

可选依赖

私房钱,控制别人是否能用

  • 可选依赖指对外隐藏当前所依赖的资源————不透明
<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--默认为false 当为true时,其他引用该依赖的项目将看不到该配置项-->
    <optional>true</optional>
</dependency>

排除依赖

主动权,主动断开不用, 解决冲突的常用方法

  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本————不需要
<!--该配置项下有多个配置项,属于引用的那一种-->
<dependency>
	<groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--排除依赖,不需要写版本号,直接排除所有的该配置-->
    <exclusions>
        <exclusion>
            <groupId></groupId>
            <artifactId></artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

  • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
  • 作用范围:
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
scope主代码测试代码打包范例
compile(默认)YYYlog4j
testYjunit
providedYYservlet-api
runtimeYjdbc
<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <!--配置依赖的可用范围,默认compile-->
    <scope></scope>
</dependency>

依赖范围传递性(了解)

即作用范围取交集即可(看上表格)

  • 带有依赖范围的资源在进行传递时,作用范围将受到影响(影响配置可见性)

左侧部分为项目二,第一行为项目一

当项目一中的某依赖类型为compile,项目二引用项目一,且将项目一配置为compile时,项目二中某项目的依赖类型依然为compile。以此类推

image-20230201233245750


生命周期与插件

构建项目生命周期

生命周期的一般阶段:

compile->test-compile->test->package->install

  • Maven构建生命周期描述的是一次构建过程经历了多少个事件
  • Maven对项目构建的生命周期划分为3套
    • clean:清理工作
    • default:核心工作,例如编译、测试、打包、部署等
    • site:产生报告,发布站点等

插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
<!--构建-->
<build>
    <plugins>
        <plugin>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <!--介绍源码插件执行在什么地方  执行-->
            <executions>
                <!--具体执行-->
                <execution>
                    <!--决定执行什么东西 比如jar 对源码打包-->
                    <goals>
                        <goal></goal>
                    </goals>
                    <!--设置执行位置(执行的生命周期过程)-->
                    <phase></phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

eg:

image-20230202175603889

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯-长草

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 已知一个长度为n&#xff0c;宽度为m的长方形草地&#xff0c;但不是每一个方格里面都长满了草&#xff0c;只有部分的方格张了些草。并且每个月草会向上下左右都繁殖一个…

Linux中MMU内存管理【进阶学习】

前言 现代操作系统普遍采用虚拟内存管理&#xff08;Virtual Memory Management&#xff09;机制&#xff0c;这需要处理器中的MMU&#xff08;Memory Management Unit&#xff0c;内存管理单元&#xff09;提供支持。 MMU&#xff08;Memory Management Unit) &#xff1a;内…

微信小程序023安全科普之家在线考试错题集

开发语言&#xff1a;Java 小程序前端框架&#xff1a;uniapp 小程序运行软件&#xff1a;微信开发者 后端技术:Ssm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 本系统设计的是一个“科普之家”知识在线考试小程序的网站&#xff0c;此网站使用户实…

计算机网络基础知识点

计算机网络基础知识点计算机网络1、概述1.1 计算机网络基本概念1.2 互联网核心部分:数据交换1.3 计算机网络的性能指标1.4 计算机网络体系结构2、物理层2.1 物理层基本概念2.2 数据通信系统模型2.3 数据编码技术2.4 信道复用技术3、数据链路层3.1 概述3.2 PPP协议3.3 CSMA/CD3.…

Python垃圾回收机制——完美讲解

Garbage collection(GC) 现在的高级语言如java&#xff0c;c#等&#xff0c;都采用了垃圾收集机制&#xff0c;而不再是c&#xff0c;c里用户自己管理维护内存的方式。自己管理内存极其自由&#xff0c;可以任意申请内存&#xff0c;但如同一把双刃剑&#xff0c;为大量内存泄…

小程序用ts时点击事件e的类型

今天检查代码的时候发现&#xff0c;小伙伴用ts写的文件里面&#xff0c;点击事件的e都是用any&#xff0c;这明显不对。所以趁着有空&#xff0c;去百度去翻阅资料解决这个问题。 小程序的官方社区下面直接给了答案&#xff0c;如下图&#xff1a; 嗯&#xff0c;是的&#x…

看ChatGPT这形势,留给我们开发人员的时间不多了

程序员一直所做的工作是什么&#xff1f;恐怕想到最后&#xff0c;每个努力的程序员都是在让自己努力的走向失业。最近ChatGPT爆火&#xff0c;他能做什么&#xff1f;能写文章&#xff0c;写的很好&#xff0c;可以代替你发邮件&#xff0c;一直到发现OpenAI的深度加持&#x…

微信小程序 Springboot+vue+nodejs学科竞赛比赛报名管理系统

目 录 摘 要 III Abstract 4 1 系统概述 5 1.1 概述 5 1.2课题意义 5 1.3 主要内容 5 2 系统开发环境 6 2.1微信开发者工具 6 2.2小程序框架以及目录结构介绍 6 2.3 JAVA简介 7 2.4 MySQL数据库 7 3 需求分析 1 3.1 系统设计目标 1 …

实战案例 Python批量识别银行卡号码并且写入Excel,初学者也可以轻松使用~

大家好&#xff0c;这里是恶霸 今天我们继续学习Python自动化办公&#xff1a;每次有新员工入职&#xff0c;都要收集大量的工资卡信息&#xff0c;并且生成Excel文档&#xff0c;能不能用Python准确、快速地解决呢&#xff1f; 今天我们就来学习一下&#xff0c;如何用1行代…

【07】FreeRTOS的列表和列表项

目录 1.列表和列表项的简介 1.1列表结构体成员-介绍 1.2列表项结构层成员-介绍 1.3迷你列表项 1.4列表和列表项的关系 2.列表相关API函数介绍 2.1列表初始化函数vListInitialise() 2.2列表项初始化函数vListInitialiseItem() 2.3列表项插入函数vListInsert() 2.4末尾…

微服务配置中心, 这个方案 Go 里用起来不输SpringCloud

微服务架构设计模式里有一条讲到&#xff0c;要设计可配置的服务。把服务从单体架构细分成微服务后&#xff0c;所有配置属性都集中存储在一个位置&#xff0c;更易于管理。这个集中存储管理配置的地方叫&#xff0c;就是配置中心。 使用配置中心还有一个好处就是&#xff0c;…

java基础面试题 一

一、面向对象五大基本原则是什么 1.单一职责原则SRP(Single Responsibility Principle) 类的功能要单一&#xff0c;不能包罗万象&#xff0c;跟杂货铺似的。 2.开放封闭原则OCP(Open&#xff0d;Close Principle) 一个模块对于扩展是开放的&#xff0c;对于修改是封闭的 …

Jenkins基于docker cloud动态增减节点

jenkins可以按照jenkins容器启动去部署 Jenkins管理动态节点 动态节点可以在有job运行时&#xff0c;临时加入一个agent到jenkins master&#xff0c;然后等job执行完毕之后&#xff0c;所加入的agent再自动删除掉&#xff0c;达到一个动态的增删节点效果&#xff0c;使所有的…

引用第三方插件到分包中即如何把uni_modules文件夹中的插件放入分包中

网上搜索了很多&#xff0c;但都没有直接说明如何把node_modules中的第三方插件如何引入到分包中&#xff0c;首先为什么要在分包引入&#xff0c;原因就是小程序有包大小的限制&#xff0c;不能超过2M&#xff0c;超过2M的话&#xff0c;则不能发布或预览&#xff0c;于是不能…

SCT81620QSTER,升降压电源芯片

P2P替代 LM3478和LM3481SCT81620QSTER设备是一个宽输入、非同步升压控制器。该设备可用于增强、间隔和反馈转换器和拓扑结构。SCT81620Q设备的开关频率可以通过将SCT81620Q设备的开关频率调整到100 kHz到2.2MHz之间的任何值。电流模式控制提供了优越的带宽和瞬态响应&#xff0…

IDEA设置注释模板(详细版)

IDEA设置注释模板 类注释模板方法注释模板效果展示 1. 类注释模板 类注释模板是IDEA创建类时生成的注释 第一步、File -> Settings 第二步、Editor -> File and Code Templates -> Includes -> File Header 点apply&#xff0c;再点ok即可 模板参考如下&#…

拉格朗日插值原理及其Julia实现

文章目录数学原理算法化测试设函数yf(x)yf(x)yf(x)在区间[a,b][a,b][a,b]上有定义&#xff0c;且在点a⩽x0⩽x1…⩽xn⩽ba\leqslant x_0\leqslant x_1\ldots\leqslant x_n\leqslant ba⩽x0​⩽x1​…⩽xn​⩽b上的值y0,y1…yny_0, y_1 \ldots y_ny0​,y1​…yn​之间存在一个函…

规则引擎-drools-3.2-drl文件构成-rule部分-属性Attribute

文章目录drl文件构成-rule部分rule示例rule nameAttribute全部属性说明no-loop 和 lock-on-activeactivation-group 和 agenda-groupdrl文件构成-rule部分 drl文件构成&#xff0c;位于官网的第5章位置&#xff0c;也是drools作为规则引擎应用的最核心部分。 其中rule模块&…

谷歌浏览器无法翻译此网页,解决方法?(谷歌浏览器无法翻译成中文,谷歌翻译,最新方法)

谷歌浏览器自带的翻译功能,对我们来说用处很大,但有的时候突然就会变成“无法翻译此网页”,针对此问题这里提供几种解决方案(翻译插件),如下: 方法1: 蓝奏云文件https://wwot.lanzouw.com/iFc7d0hmrtpg 访问密码:slee 方法2: 脚本之家

分布式事务的4种模式

分布式事务理论基础 解决分布式事务&#xff0c;也有相应的规范和协议。分布式事务相关的协议有2PC、3PC。 由于三阶段提交协议3PC非常难实现&#xff0c;目前市面主流的分布式事务解决方案都是2PC协议。 有些文章分析2PC时&#xff0c;几乎都会用TCC两阶段的例子&#xff0…