全方面熟悉Maven项目管理工具(一)认识Maven、Maven如何安装?

1. Maven

1.1 应用场景:

本地仓库: 我们使用的jar依赖于maven的本地仓库

自动部署: 本地仓库推送到远程仓库,

  1. 远程库通知 Jenkins工具,
  2. Jenkins 调用Maven构建war包,
  3. Jenkins 再调用准备好的脚本程序,将war包部署到docker容器中。当有多个docker容器后,就可以使用kubernetes进行管理,形成云原生

私有仓库: 可以将数据发布到 Nexus 私服中。谁需要就可以通过 Nexus 私服来获取数据

1.2 哪些人需要这门课?

小白: 快速入门

普通开发人员: 开发项目

资深开发人员: 考虑到 jar 包冲突等棘手问题还是需要精通Maven

1.3 三大学习流程:

1.3.1 先学会再说

  • 最小必要知识
  • 快速上手,学完就能用
  • 简单粗暴

1.3.2 Maven 环境开发全流程掌握

  • 基于 JavaWeb 案例使用Maven实现: 搭建环境、功能开发、应用部署
  • 基于 SSM 案例使用Maven实现: 搭建环境、功能开发、应用部署
  • 基于 SpringBoot、SpringCloud 微服务案例使用Maven实现: 搭建环境、功能开发、应用部署

1.3.3 Maven 技术体系全面覆盖

1.3.3.1 理论:
  • 声明周期体系:
    • 声明周期阶段
    • 插件和目标
    • Mojo 开发与配置
  • POM 体系:
    • 四层 POM
    • dependency 标签详解
    • build 标签详解
    • profile 标签详解
  • 属性系统:
    • java 系统属性
    • 系统环境变量
    • project 属性
    • settings 属性
    • 自定义属性
1.3.3.2 操作:
  • Nexus 私服:
    • 搭建
    • 启动和初始化
    • 下载 jar 包
    • 发布 jar 包
    • 引用 jar 包
  • jar 冲突:
    • Maven 插件检测
    • IDEA 插件检测
  • 体系外 jar 包导入:
    • 场景描述
    • 解决方法

2. 为什么要学习Maven?

2.1 Maven 作为依赖管理工具

2.1.1 jar 包的规模

随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包越来越多,项目中,一个模块里面用到上百个jar包是非常正常的

例如下面的例子:我们只用到了 SpringBoot、Springcloud 框架中的三个功能:

  • Nacos 服务注册发现
  • Web 框架环境
  • 图模板技术 Thymeleaf

最终却导入106个 jar 包!

但如果使用Maven来引入这些 jar 包只需要配置三个依赖

2.1.2 jar 包的来源:

jar包所属技术的官网通常是英文界面,网站的结构又不尽相同,甚至找到下载链接还发现需要通过特殊的工具下载

第三方网站提供下载。问题是不规范,在使用过程中会出现各种问题:

  • jar包的名称
  • jar包的版本
  • jar包内的具体细节:类名不同,方法不存在等

而使用Maven 后,依赖对应的jar包能够自动下载,方便、快捷又规范

2.1.3 jar 包之间的依赖关系

框架中使用的jar包,不仅数量庞大,而且彼此之间存在错综复杂的依赖管理。依赖关系的复杂程度,已经上升到了完全不能靠人力手动解决的程度。另外,jar之间有可能产生冲突,进一步增加我们在 jar 包使用过程中的难度

3. Maven 作为构建管理工具

3.1 你没有注意过的构建

你可以不使用 Maven,但是构建必须要做。当我们使用IDEA开发时,构建是 IDEA 替我们做的。

3.2 脱离 IDE 环境仍需构建

在这里插入图片描述

3.3 结论

  • 管理规模庞大的 jar 包,需要专门工具
  • 脱离 IDE 环境执行构建操作,需要专门工具

4. Maven是什么?

Maven 是 Apache 软件基金会组织推虎的一款专门为 java 项目提供构建依赖管理支持的工具

在这里插入图片描述

4.1 构建

java 项目开发过程中,构建指的是使用【原材料生产产品】的过程

  • 原材料:
    • java 源代码
    • 基于 HTML 和 Thymeleaf 文件
    • 图片
    • 配置文件
  • 产品:
    • 一个可以在服务器上运行的项目

构建过程包含的主要的环节:

  • 清理: 删除上一次构建的结果,为下一次构建做好准备
  • 编译: java 源程序编译成 *.class 字节码文件
  • 测试: 运行提前准备好的测试程序
  • 报告: 针对刚才测试的结果生成一个全面的信息
  • 打包:
    • java工程:jar 包
    • Web工程:war包
  • 安装: 把一个 Maven 工程经过打包操作生成的 jar 包或 war 包安装到 Maven 仓库
  • 部署: 将准备好的 jar 包或 war 包部署到服务器上运行
    • 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
    • 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上

4.2 依赖

如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。例如:

  • junit-4.12 依赖 hamcrest-core-1.3

依赖管理中要解决的具体问题:

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行跳转,让某些 jar 包不会被导入

4.3 Maven 的工作机制

在这里插入图片描述

5. 核心程序的安装

5.1 Maven 官网地址

首页:

Maven – Welcome to Apache Maven

下载地址:

Maven – Download Apache Maven

在这里插入图片描述

6. 解压Maven核心程序

核心程序压缩包:apache-maven-3.8.6-bin.zip,加压到非中文、没有空格的目录。

在解压目录中,我们需要着重关注Maven的核心配置文件:conf/settings.xml

7. 指定本地仓库

默认仓库为:Default: ${user.home}/.m2/repository

由于本地仓库的默认位置是在用户的家目录下,而家目录往往是在 C 盘。

将来Maven仓库中 jar 包越来越多,仓库体积越来越大,可能会拖慢 C 盘的运行速度,影响系统性能。所以建议将 Maven 的本地仓库放在其他盘符下。配置方式如下:

<!--更改 Maven 的settings.xml文件,添加该标签指定保存的路径--> 
<!--配置本地仓库-->
<localRepository>D:\JavaStorage:\maven-repo</localRepository>

记住: 一定要手动创建 <localrepository> 标签并配置地址

注意: 本地仓库本身也需要使用一个非中文、没有空格的目录!

8. 配置阿里云提供的镜像仓库

Maven 下载 jar 包默认访问境外的中央仓库,而国外网站速度很慢。改成阿里云提供的镜像仓库,访问国内网站,可以让 Maven 下载 jar 包的时候速度更快。配置的方式如下:

8.1 原有配置

<mirrors>
    <mirror>
          <id>maven-default-http-blocker</id>
          <mirrorOf>external:http:*</mirrorOf>
          <name>
              Pseudo repository to mirror external repositories initially using HTTP.</name>
        <url>http://0.0.0.0/</url>
        <blocked>true</blocked>
    </mirror>
</mirrors>	

8.2 加入我们的配置

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <blocked>true</blocked>
</mirror>

9. 配置 Maven 工程的基础 JDK 版本

如果按照默认配置运行,Java 工程使用的默认 JDK 版本是 1.5 ,而我们熟悉和常用的是 JDK 1.8 版本。

  • 找到 settings.xml 配置文件,在 profiles 标签中添加如下标签组

修改配置方式如下:

<profile>    
    <id>jdk-1.8</id>    
    <activation>    
    	<activeByDefault>true</activeByDefault>    
    	<jdk>1.8</jdk>    
    </activation>    
    <properties>    
    	<maven.compiler.source>1.8</maven.compiler.source>    
    	<maven.compiler.target>1.8</maven.compiler.target>    
    	<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
    </properties>    
</profile>

10. 配置环境变量

Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。

10.1 配置 MAVEN_HOME

在这里插入图片描述

配置环境变量的规律:

  • XXX_HOME 通常指向的是 bin 目录的上一级
  • PATH 指向的是 bin 目录

10.2 配置PATH

编辑 Path 变量,添加变量。具体操作见图:

在这里插入图片描述

11. 测试

打开cmd命令行,输入

mvn -version

如果出来maven相关的版本信息,那么也就代表maven环境安装成功了。

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

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

相关文章

linux jdk环境变量变量新配置方式

1.jdk17--> jdk8环境变量配置,source /etc/profile了也不生效 which java #假设上命令运行结果为/usr/bin/java rm -rf /usr/bin/javaln -s $JAVA_HOME/bin/java /usr/bin/java source /etc/profile# 断开本次远程连接&#xff0c;重连检查java -version 2.jdk环境变量变…

UDP和TCP的区别

UDP&#xff08;User Datagram Protocol&#xff09;和TCP&#xff08;Transmission Control Protocol&#xff09;是两种不同的传输层协议&#xff0c;它们在数据传输的方式和可靠性方面有显著区别&#xff1a; 连接方式&#xff1a; TCP&#xff1a;面向连接的协议&#xff0…

Unity DOTS中的Archetype与Chunk

Unity DOTS中的Archetype与Chunk 在Unity中&#xff0c;archetype&#xff08;原型&#xff09;用来表示一个world里具有相同component类型组合的entity。也就是说&#xff0c;相同component类型的entity在Unity内部会存储到一起&#xff0c;共享同一个archetype。 使用这样的设…

Linux系统:本机(物理主机)访问不了虚拟机中的apache服务问题的解决方案

学习目标&#xff1a; 提示&#xff1a;本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案 Linux系统&#xff1a;Ubuntu 23.04&#xff1b; 文中提到的“本机”&#xff1a;代表&#xff0c;宿主机&#xff0c;物理主机&#xff1b; 首先&#xff0c…

linux 中mysql my.cnf 配置模版

前置准备 sudo systemctl stop mysqld 注意&#xff1a; 原本配置重命名做备份 备份数据 删文件 直接新建 my.cnf 把配置 11要粘进去的内容 直接粘进去 注意&#xff1a;尽管log-bin 和 log_bin 都可以启用二进制日志&#xff0c;但为了保持与现代MySQL版本的兼容性和一…

物流行业创新:SpringBoot技术应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

24.安卓逆向-frida基础-objection工具3-实战

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

全方面熟悉Maven项目管理工具(五)教你IDEA创建Maven基本项目、导入工程和模块,并为你讲解Maven的生命周期

1. IDEA 配置 Maven 本身 IDEA 就可以在一个项目中创建多个子模块。 1.1 创建父工程 如果要构建不同的 Maven 工程类型&#xff0c;可以勾选【从原型创建】在列表中选择工程类型 1.2 IDEA 配置 Maven 本地仓库 在设置中前往&#xff1a;构建、执行、部署 >> 构建工具…

鸿蒙网络编程系列28-服务端证书锁定防范中间人攻击示例

1. TLS通讯中间人攻击及防范简介 TLS安全通讯的基础是基于对操作系统或者浏览器根证书的信任&#xff0c;如果CA证书签发机构被入侵&#xff0c;或者设备内置证书被篡改&#xff0c;都会导致TLS握手环节面临中间人攻击的风险。其实&#xff0c;这种风险被善意利用的情况还是很…

Linux基础项目开发day06:量产工具——业务系统

文章目录 前言一、流程代码框架1、业务系统框架流程2、主页面流程图3、main.c实现流程 二、处理配置文件1、配置文件是啥&#xff1f;config.h 2、怎么处理配置文件&#xff1f;config.c 三、生成界面1、计算每个按钮的Region2、逐个生成按钮画面->生成页面 四、读取输入事件…

记录一次hiveserver2卡死(假死)问题

问题描述 给开发人员开通了个账号&#xff0c;连接hive进行查询&#xff0c;后来发现&#xff0c;hive服务有时候会卡死&#xff0c;查询不了&#xff0c;连不上&#xff08;所有账号/客户端都连不上hive&#xff09;&#xff0c;但在chd里面看监控&#xff0c;服务器资源状态…

物联网之超声波测距模块、arduino、esp32

MENU 原理硬件电路设计软件程序设计 原理 超声波是一种频率高于20000Hz的声波&#xff0c;功率密度为p≥0.3W/cm&#xff0c;它的方向性好&#xff0c;反射能力强&#xff0c;易于获得较集中的声能。超声波用于许多不同的领域&#xff0c;比如检测物体和测量距离&#xff0c;清…

Unity 2d UI 实时跟随场景3d物体

2d UI 实时跟随场景3d物体位置&#xff0c;显示 3d 物体头顶信息&#xff0c;看起来像是场景中的3dUI&#xff0c;实质是2d UIusing System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using UnityEngine.UI; /// <summary>…

【JS】无法阻止屏幕滚动

监听滚轮事件&#xff0c;阻止默认行为&#xff0c;但未生效&#xff0c;且控制台报错。 window.addEventListener(wheel, (e) > {e.preventDefault(); })这是因为现代浏览器使用 Passive 事件监听器&#xff0c;默认启用了 passive 模式以确保性能&#xff0c;不会调用 pr…

Cancer Cell|最新发表的单细胞成纤维细胞分析代码,速来学习!!!

简介 成纤维细胞在维持组织稳态、应对炎症和纤维化状况、帮助伤口愈合以及促进癌症进展的复杂舞蹈中起着关键作用。在癌症领域&#xff0c;成纤维细胞已成为肿瘤微环境&#xff08;TME&#xff09;中的核心人物&#xff0c;发挥着多方面的作用。这些作用包括细胞外基质&#xf…

【深度学习实战—12】:基于MediaPipe的手势识别

✨博客主页&#xff1a;王乐予&#x1f388; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深度学习】【排序算法】 目录 &#x1f63a;一、Med…

Java设计模式梳理:行为型模式(策略,观察者等)

行为型模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了&#xff0c;所以把它放到最前面进行介绍。它比较简单&#xff0c;我就不废话&#xff0c;直接用代码说事吧。 下面设计的…

电能表预付费系统-标准传输规范(STS)(16)

6.3.9 MPL: MaximumPowerLimit&#xff08;最大功率限制&#xff09; The maximum power limit field is a 1 6-bit field that indicates the maximum power that the load may draw, in watts. Calculation of this field is identical to that of the TransferAmount field…

【JavaEE】——自定义协议方案、UDP协议

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;自定义协议 1&#xff1a;自定义协议 &#xff08;1&#xff09;交互哪些信息 &…

数据库设计与开发—初识SQLite与DbGate

一、SQLite与DbGate简介 &#xff08;一&#xff09;SQLite[1][3] SQLite 是一个部署最广泛、用 C 语言编写的数据库引擎&#xff0c;属于嵌入式数据库&#xff0c;其作为库被软件开发人员嵌入到应用程序中。 SQLite 的设计允许在不安装数据库管理系统或不需要数据库管理员的情…