大数据之Maven
一、Maven的作用
作用一:下载对应的jar包
避免jar包重复下载配置,保证多个工程共用一份jar包。Maven有一个本地仓库,可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包,并且会下载所依赖的其他jar包,保证规范、完整、准确。
groupId: 域名的反写artifactId: 项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。version:jar的版本
作用二:处理jar之间的冲突
jar包之间的冲突处理:多个jar包之间的依赖关系也存在冲突的情况,比如jar包A和jar包B所依赖的子jar包虽然是同一个,但是依赖的版本不一致。Maven一般通过最短路径者优先和先声明者优先来解决这个问题。
- 最短路径指依赖树的深度,深度越低,优先级越高。
- 声明的优先与否通过pom.xml的顺序来决定,放在前面的优先级高。
作用三:项目的模块化管理
每个开发者一个模块
作用四:项目的分布式部署
单个计算机无法独立运行某个项目,将项目进行拆分,部署到多个计算机当中。利用多个计算机的存储资源和计算资源来处理某个项目,Maven框架就可以自动化的构建分布式项目。
二、Maven是什么
Maven是一款自动化构建工具,服务于项目构建和依赖管理。
1.构建是什么
- 纯java代码:java代码编译得到.class文件
- web工程:java代码部署到服务器
- 实际项目:java代码、框架配置文件、国际化等其他资源文件,按照正确的目录结构部署到服务器中。(构建)
2.构建的环节
- 清理:删除以前的编译结果,为重新编译做好准备
- 编译:java -> class文件
- 测试:测试关键环节,确保项目没有关键性问题
- 报告:展示测试结果

- 打包:将一堆文件打包为一个压缩文件,用于部署到其他服务器
- 安装:在Maven环境下将打包的结果(jar包或war包)安装到本地仓库
- 部署:将打包的结果部署到远程仓库或将war包部署到服务器
3. 自动化构建
将编译、打包、部署、测试这些步骤交给Maven来做,这个就是自动化构建。
三、使用Maven
- 配置maven环境变量
- 修改maven远程仓库的网址,改为国内的镜像网址
- 打开apache-maven/conf/settings.xml文件
- 创建Maven本地仓库,文件名建议为maven_rep
- 修改本地仓库的地址为你创建的仓库路径
<localReposity> - 修改阿里云镜像地址
<mirror> - 修改Maven编译版本,建议使用java 8
<profile>
- 在IDEA中修改maven配置 setting/build/build tools/maven
- 修改maven路径,使用自己的maven,替换idea自带的
- 修改maven配置文件settingxml路径
- 创建maven工程,不要选择空项目,使用new project
- build system: 选择maven
- groupId: 公司域名倒写
- artifactId:项目名
- 目录结构
- src/main: 主程序
- src/main/java: 源代码
- resources目录用于存放配置文件和资源文件
- test目录用于存放测试程序。
- external libraries: 已经下载的jar包
- 使用maven的lifecycle按钮来构建项目

- 添加一个打包插件,让打包后的jar包,包含我们运行代码时所用的依赖。这个配置看情况添加,如果不需要可以注释掉。
在pom.xml中加入如下内容:
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
四、核心概念
- POM:项目对象模型,将java工程的相关信息封装成对象作为便于操作和管理的模型。对应的就pom.xml文件,学习Maven就是学习pom.xml文件中的配置。
- 约定的目录结构: 约定 > 配置 > 编码, 而Maven就是约定好了特定的目录结构,注意不要轻易删除原有的目录结构。
- 坐标:(groupId, artifactId, version)-> (公司,项目模块名,模块版本),用来定位当前模块在本地仓库的位置。将gav三个向量连起来就是模块在本地仓库中的位置。注意每个点分割为一个文件夹。我们自己的maven工程必须执行install命令才会进入本地仓库。
1. 依赖管理
当前工程会到本地仓库根据坐标寻找所依赖的jar包。
- 直接依赖:Hello 依赖 junit , HelloFriend 依赖 Hello
- 间接依赖:HelloFriend 间接依赖 junit
依赖的范围
provided: main,test目录下的代码都可以访问, 运行时无法访问compile: main, test,运行时都可以访问test: 只有test目录下可以访问
统一管理包的版本
Maven可以通过给包的版本号设置一个变量的形式来动态设置包的版本,便于包的升级换代。使用${变量名}的形式来统一修改。
2. 仓库
分类
- 本地仓库:为当前本机电脑上的所有Maven工程服务
- 远程仓库
- 私服:个人搭建的
- 中央仓库:连接比较慢
- 中央仓库的镜像: 架设在各个大洲,为中央仓库分担流量
仓库中的文件
- Maven的插件
- 我们自己开发的项目的模块
- 第三方框架或工具的jar包
3.生命周期
生命周期定义各个构建环节的执行顺序,Maven靠这个自动化的执行构建命令。
- clean生命周期:清理
- site生命周期:生成站点文档
- default生命周期:
compile -> test compile -> test ->package -> install- 运行某个阶段时,会将之前的各个阶段都执行一遍
插件
- Maven核心只是定义了抽象的生命周期,具体实现是插件实现的
- 每个插件可以实现多个功能
五、继承
由于非compile范文的依赖信息是无法在外部工程中传递的。我们可以在父工程中引入相应的依赖,比如junit。子工程中的模块会自动继承父工程的依赖关系,我们可以在父工程中管理子工程的依赖。
可以在父工程里面的版本进行修改,子工程会自动跟随父工程变化。同时也可以在父工程中修改依赖的范围(provided, compile, test),子工程也会随着变化。
注意:因此在子工程中的依赖不添加版本号信息,子工程跟随父工程变化即可。
六、聚合
可以在父工程中使用modules关键字聚合子工程,聚合后,可以在父工程中对所有子工程进行清理、编译、测试、打包等操作。
七、Maven酷站
权威网址:http://mvnrepository.com/
搜索需要的Jar包依赖信息:http://search.maven.org
八、常见问题及解决办法
问题一:如果下载过程中由于网速问题导致下载失败,会生成一个xxxx.lastupdated的文件,需要删除该文件后再重新刷新。
问题二:not found class找不到类 / not found method
jar包冲突问题,手动使用exclusion关键字排除产生冲突的包。
相关文章:
大数据之Maven
一、Maven的作用 作用一:下载对应的jar包 避免jar包重复下载配置,保证多个工程共用一份jar包。Maven有一个本地仓库,可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包,并且会下载所依赖的其他jar包&…...
自制centos7.9的wsl发行版
自制centos7.9的wsl发行版 参考:https://zhuanlan.zhihu.com/p/482538727 Windows10提供了一个wsl工具用于直接在windows上运行Linux子系统。 CentOS国内镜像下载:https://mirrors.aliyun.com/centos/ 这里选择了7.9.2009版本:https://mirr…...
使用VisualStudio制作上位机(五)
文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…...
ChatGPT在医疗领域可应用于改善与患者的沟通
注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 自从ChatGPT在2022年末对公众开放以来,OpenAI的这款生成式AI聊天机器人在医疗领域展示出了巨大潜力。它已经通过了美国医学执照考试&a…...
直播预告|博睿学院第四季即将开讲:博睿数据资深运维团队现身说法!
博睿学院第四季开讲啦!本季博睿学院的课程将于本周四(8月31日)16点正式启动。本季我们邀请到了博睿数据平台支撑中心的四位资深运维专家现身说法,来为我们分享一体化智能可观测平台Bonree ONE的实践干货。 他们,见多识…...
端到端自动驾驶综述
End-to-end Autonomous Driving: Challenges and Frontiers 文章脉路 Introduction 从经典的模块化的方法到端到端方法的一个对比, 讲了各自的优缺点, 模块化的好处是各个模块都有自己明确的优化的目标, 可解释性较强, 且容易debug, 缺点是各个模块优化的目标并不是最终的驾…...
mysql索引、事务、存储引擎
一、索引 索引的概念: 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。使用索引后可以不用扫描全表来定位某行的数据,而是…...
【CMU15445】Fall 2019, Project 2: Hash Table 实验记录
目录 实验准备实验测试 实验准备 官方说明:https://15445.courses.cs.cmu.edu/fall2019/project2/ 实验测试 Task 1: mkdir build cd build make hash_table_page_test ./test/hash_table_page_testTask 2: make hash_table_test ./test…...
PMP证书是不是烂大街了?
大家都知道,PMP证书是项目管理领域的金字招牌。近年来,随着项目管理的重要性日益凸显,越来越多的人开始关注和学习PMP证书。无论是企业招聘还是个人职业发展,PMP证书都成为了一张炙手可热的敲门砖。 那么,PMP证书到底…...
Mac下Docker Desktop安装命令行工具、开启本地远程访问
Mac系统下,为了方便在terminal和idea里使用docker,需要安装docker命令行工具,和开启Docker Desktop本地远程访问。 具体方法是在设置-高级下, 1.将勾选的User调整为System,这样不用手动配置PATH即可使用docker命令 …...
Java实现根据商品ID获取京东商品详情数据,1688商品详情接口,1688API接口封装方法
要通过京东的API获取商品详情数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情: 首先,确保您已注册成为京东开放平台的开发者,并创建一…...
element-plus指定el-date-picker的弹出框位置
此处记录一下,通过popper-options指定popper出现的位置...
游戏陪玩语音聊天系统3.0商业升级独立版本源码
首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码 1、增加人气店员轮播 2、优化ui界面丨优化游戏图标展示丨优化分类展示 3、增加动态礼物打赏功能 4、增加礼物墙功能 增加店员满足业绩,才能升级功能 5、增加店员等级不同,…...
TCP/IP网络江湖武艺传承:物理层与通信江湖的幕后(物理层中篇:物理层与现代通信技术)
目录 〇、引言:进入现代通信技术的江湖 一、数字信号与模拟信号:传承与差异...
Nuxt 菜鸟入门学习笔记三:视图
文章目录 入口文件组件 Components页面 Pages布局 Layouts Nuxt 官网地址: https://nuxt.com/ Nuxt 提供多个组件层来实现应用程序的用户界面。 入口文件 App.vue组件 Components页面 Pages布局 Layouts 下面逐一进行介绍。 入口文件 默认情况下,Nu…...
Python Opencv实践 - 霍夫线检测(Hough Lines)
import cv2 as cv import numpy as np import matplotlib.pyplot as plt import randomimg cv.imread("../SampleImages/GreenBoard.jpg") print(img.shape) plt.imshow(img[:,:,::-1])#将图像转为二值图 gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) plt.imshow(gra…...
Weblogic漏洞(四)之 CVE-2018-2894 任意文件上传漏洞
CVE-2018-2894 任意文件上传漏洞 漏洞影响 Weblogic受影响的版本: 10.3.6.012.1.3.012.2.1.212.2.1.3 漏洞环境 此次我们使用的是vnlhub靶场搭建的环境,是vnlhub中的Weblogic漏洞中的CVE-2018-2894靶场,我们 cd 到 CVE-2018-2894&#x…...
C++:string的[ ],at,push_back
1.[ ]运算符和at函数 返回的是string的当前字符串的合法的索引位置的引用,所谓的合法是指小于size的索引 #include <string> #include <iostream>using namespace std;int main() {string str = "hello";cout<<"str:"<<str<…...
C语言(第三十六天)
4. 位操作符:&、|、^ 位操作符有: & //按位与 | //按位或 ^ //按位异或 注:他们的操作数必须是整数。 直接上代码: #include <stdio.h> int main() { int num1 -3; int num2 5; num1 & num2; num1 | num2; nu…...
005_C++数学库常用函数
数学库常用函数 函数 我们其实已经掌握了一些函数,比如主函数main()。还有其他的函数比如一些库中的函数,例:<stdio.h>头文件对应标准输入输出库中的printf()和scanf()、<stdlib.h>标准库头文件对应的标准库中的srand()和rand(),除此之外在C++中常用的还有数…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
