大数据之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.构建的环节

  1. 清理:删除以前的编译结果,为重新编译做好准备
  2. 编译:java -> class文件
  3. 测试:测试关键环节,确保项目没有关键性问题
  4. 报告:展示测试结果
    在这里插入图片描述
  5. 打包:将一堆文件打包为一个压缩文件,用于部署到其他服务器
  6. 安装:在Maven环境下将打包的结果(jar包或war包)安装到本地仓库
  7. 部署:将打包的结果部署到远程仓库或将war包部署到服务器

3. 自动化构建

将编译、打包、部署、测试这些步骤交给Maven来做,这个就是自动化构建。

三、使用Maven

  1. 配置maven环境变量
  2. 修改maven远程仓库的网址,改为国内的镜像网址
    • 打开apache-maven/conf/settings.xml文件
    • 创建Maven本地仓库,文件名建议为maven_rep
    • 修改本地仓库的地址为你创建的仓库路径<localReposity>
    • 修改阿里云镜像地址<mirror>
    • 修改Maven编译版本,建议使用java 8 <profile>
  3. 在IDEA中修改maven配置 setting/build/build tools/maven
    • 修改maven路径,使用自己的maven,替换idea自带的
    • 修改maven配置文件settingxml路径
  4. 创建maven工程,不要选择空项目,使用new project
    • build system: 选择maven
    • groupId: 公司域名倒写
    • artifactId:项目名
  5. 目录结构
    • src/main: 主程序
    • src/main/java: 源代码
    • resources目录用于存放配置文件和资源文件
    • test目录用于存放测试程序。
    • external libraries: 已经下载的jar包
  6. 使用maven的lifecycle按钮来构建项目
  7. 添加一个打包插件,让打包后的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>

四、核心概念

  1. POM:项目对象模型,将java工程的相关信息封装成对象作为便于操作和管理的模型。对应的就pom.xml文件,学习Maven就是学习pom.xml文件中的配置。
  2. 约定的目录结构: 约定 > 配置 > 编码, 而Maven就是约定好了特定的目录结构,注意不要轻易删除原有的目录结构。
  3. 坐标:(groupId, artifactId, version)-> (公司,项目模块名,模块版本),用来定位当前模块在本地仓库的位置。将gav三个向量连起来就是模块在本地仓库中的位置。注意每个点分割为一个文件夹。我们自己的maven工程必须执行install命令才会进入本地仓库。

1. 依赖管理

当前工程会到本地仓库根据坐标寻找所依赖的jar包。

  • 直接依赖:Hello 依赖 junit , HelloFriend 依赖 Hello
  • 间接依赖:HelloFriend 间接依赖 junit

依赖的范围

  • provided: main,test目录下的代码都可以访问, 运行时无法访问
  • compile: main, test,运行时都可以访问
  • test: 只有test目录下可以访问

统一管理包的版本

Maven可以通过给包的版本号设置一个变量的形式来动态设置包的版本,便于包的升级换代。使用${变量名}的形式来统一修改。

2. 仓库

分类

  1. 本地仓库:为当前本机电脑上的所有Maven工程服务
  2. 远程仓库
    • 私服:个人搭建的
    • 中央仓库:连接比较慢
    • 中央仓库的镜像: 架设在各个大洲,为中央仓库分担流量

仓库中的文件

  • Maven的插件
  • 我们自己开发的项目的模块
  • 第三方框架或工具的jar包

3.生命周期

生命周期定义各个构建环节的执行顺序,Maven靠这个自动化的执行构建命令。

  • clean生命周期:清理
  • site生命周期:生成站点文档
  • default生命周期:compile -> test compile -> test ->package -> install
    • 运行某个阶段时,会将之前的各个阶段都执行一遍

插件

  1. Maven核心只是定义了抽象的生命周期,具体实现是插件实现的
  2. 每个插件可以实现多个功能

五、继承

由于非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关键字排除产生冲突的包。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【现场问题】oracle 11g 和12c 使用jdbc链接,兼容的问题

oracle不同版本 问题是什么寻找解决方式首先Oracle的jdbc链接有几种形式?Oracle 11g的链接是什么呢Oracle 12C的链接是什么呢我的代码是哪种&#xff01;&#xff1f;发现问题没 解决问题代码 问题是什么 项目上建立Oracle数据源&#xff0c;以前大部分都是&#xff0c;11g的…

38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

springboot为 spring mvc 提供的静态资源管理 ★ Spring Boot为Spring MVC提供了默认的静态资源管理&#xff1a; ▲ 默认的四个静态资源目录&#xff1a; /META-INF/resources > /resources > /static > /public ▲ ResourceProperties.java类的源代码&#xff0…

上传镜像到阿里云的ACR

1、开通阿里云ACR 2、在ACR 中创建命名空间 3、本地安装docker 4、登录到 开通ACR&#xff0c;需要配置访问凭证 [rootmaster ~]# docker login --username***lb registry.cn-beijing.aliyuncs.com Password: 5、给镜像打标签 [rootmaster ~]# docker images REPOSITORY …

Unity Alembic闪烁问题

最近在做项目时&#xff0c;发现Clo3D导出的服装abc动画&#xff0c;导入到Unity中后(已提前导入Alembic插件)&#xff0c;运行时屏幕会闪烁(变黑)。 经过几轮测试&#xff0c;发现是切线的问题。解决办法很简单。将abc文件上的Tangents属性值改为None即可。

1. 学习 K8S: Docker 基础

学习 K8S: Docker 基础 1. Docker 的诞生 1.1 首次展示 2013 年 3 月 15 日&#xff0c;在北美的圣克拉拉市召开了一场 Python 开发者社区的主题会议 PyCon&#xff0c;研究和探讨各种 Python 开发技术和应用&#xff0c; 在当天的会议日程快结束时&#xff0c;有一位名为 S…

系统报错msvcp120.dll丢失的解决方法,常见的三种解决方法

今天为大家讲述关于系统报错msvcp120.dll丢失的解决方法。在这个信息爆炸的时代&#xff0c;我们每个人都可能遇到各种各样的问题&#xff0c;而这些问题往往需要我们去探索、去解决。今天&#xff0c;我将带领大家走进这个神秘的世界&#xff0c;一起寻找解决msvcp120.dll丢失…

weak_ptr是怎么探知对象生死的

weak_ptr是C智能指针中的一种。它用于解决共享所有权的问题&#xff0c;并且可以避免因循环引用而导致的内存泄漏。 weak_ptr本身并不承担对象的所有权&#xff0c;它指向由shared_ptr管理的对象。与shared_ptr不同&#xff0c;weak_ptr并不会增加计数器来计算对象的引用次数。…

2023年国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

深度学习9:简单理解生成对抗网络原理

目录 生成算法 生成对抗网络&#xff08;GAN&#xff09; “生成”部分 “对抗性”部分 GAN如何运作&#xff1f; 培训GAN的技巧&#xff1f; GAN代码示例 如何改善GAN&#xff1f; 结论 生成算法 您可以将生成算法分组到三个桶中的一个&#xff1a; 鉴于标签&#…

快速理解 X server, DISPLAY 与 X11 Forwarding

​ X server X server是X Window System &#xff08;简称X11或者X&#xff09;系统中的显示服务器&#xff08;display server&#xff09;&#xff0c;用于监听X client发送来的图形界面显示请求&#xff0c;并且将图形界面绘制并显示在屏幕&#xff08;screen&#xff09;…

eslint和prettier格式化冲突

下载插件 ESLint 和 Prettier ESLint 进入setting.json中 setting.json中配置 {"editor.tabSize": 2,"editor.linkedEditing": true,"security.workspace.trust.untrustedFiles": "open","git.autofetch": true,"…

伦敦银和伦敦金的区别

伦敦银河伦敦金并称贵金属交易市场的双璧&#xff0c;一般投资贵金属的投资者其实不是交易伦敦金就是交易伦敦银。相信经过一段时间的学习和投资&#xff0c;不少投资者都能分辨二者的区别。下面我们就来谈谈伦敦银和伦敦金有什么异同&#xff0c;他们在投资上是否有差别。 交易…

KMP算法开荒

文章目录 一 、前言二、 暴力解法三、KMP算法原理3.1 自动子串的指针3.2 跳过多少个字符3.3 next数组 - 暴力3.4 next数组 - 求解 四 KMP实现 一 、前言 字符串匹配 import re print(re.search(www, www.runoob.com).span()) # 在起始位置匹配 print(re.search(com, www.run…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMIZER

文章目录 前言PIECEWISE_JERK_PATH_OPTIMIZER功能简介PIECEWISE_JERK_PATH_OPTIMIZER相关配置PIECEWISE_JERK_PATH_OPTIMIZER总体流程OptimizePathpiecewise_jerk_problem二次规划问题标准形式定义优化变量定义目标函数设计约束OptimizeFormulateProblem计算QP系数矩阵Calculat…

【C++】AVL树(高度平衡二叉树)

AVL树 概念AVL树节点定义AVL树节点插入AVL树四种旋转情况左单旋右单旋先左单旋再右单旋先右单旋后左单旋 元素的插入及控制平衡判断最后节点是否平衡 概念 二叉搜索树虽然可以缩短查找的效率&#xff0c;但如果数据有序或者接近有序二叉搜索树将退化为单支树&#xff0c;查找元…

(mybatis与spring集合

mybatis与spring集合 一、Spring集成MyBatis1.1. pom依赖1.2. 配置文件1.3. Spring整合MyBatis1.3.1. 配置自动扫描JavaBean1.3.2. 配置数据源1.3.3. 配置session工厂1.3.4. 配置mapper扫描接口1.3.5. 配置事务管理器1.3.6. 配置AOP自动代理1.4. 测试 二、Spring集成PageHelper…

Firefox(火狐),使用技巧汇总,问题处理

本文目的 说明火狐如何安装在C盘之外的盘&#xff0c;即定制安装路径。如何将同步功能切换到本地服务上。默认是国际服务器。安装在C盘之后如何解决&#xff0c;之前安装的扩展无法自动同步的问题。扩展或插件失效问题解决方案。顺带分享一下&#xff0c;火狐的一些比较好用的…

经管博士科研基础【4】排队论M/M/1公式

公式来源于B站睿智小课堂&#xff1a; 上面的公式要学会推导&#xff0c;具体推导过程也要学习一下【可见B站睿智小课堂】 具体推导思路是&#xff1a; 【1】先求解得到系统的队长L&#xff1a;这需要用到马尔科夫排队过程的相关知识&#xff0c;也就是说仅仅在排队过程是马尔…