大数据之Maven

news2024/9/22 7:28:05

一、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.coloradmin.cn/o/931835.html

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

相关文章

【MOS管的作用和工作原理】

数电/模电知识学习与分享001 MOS管的作用和工作原理1、MOS管基本概念2、MOS管基本原理3、MOS管广泛作用4、MOS管特点4、参考文献 MOS管的作用和工作原理 1、MOS管基本概念 MOS管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是一种常用的半导体…

100个Python小游戏,上班摸鱼我能玩一整年【附源码】

哈喽铁子们 表弟最近在学Python&#xff0c;总是跟我抱怨很枯燥无味&#xff0c;其实&#xff0c;他有没有认真想过&#xff0c;可能是自己学习姿势不对&#xff1f; 比方说&#xff0c;可以通过打游戏来学编程&#xff01; 今天给大家分享100个Python小游戏&#xff0c;一定…

个人记录:划分

原始数据展示 每五个大图移动一次所有的大图名称的小图片。 读取指定图片格式的图片名称&#xff0c;内置函数map执行,文件移动 图片01-17[:27] 图片17-70要改27为25 import os import shutil # source dataset/sat_train/ source_path "/mnt/sdb1/fenghaixia/dsm/da…

考虑储能电池参与一次调频技术经济模型的容量配置方法(matlab代码)

目录 1 主要内容 储能参与调频原理 储能参与一次调频的充放电策略 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文献《考虑储能电池参与一次调频技术经济模型的容量配置方法》模型&#xff0c;以调频效果最优为目标&#xff0c;考虑储能参与一次调频的充放电…

Tcp 协议的接口测试

首先明确 Tcp 的概念&#xff0c;针对 Tcp 协议进行接口测试&#xff0c;是指基于 Tcp 协议的上层协议比如 Http &#xff0c;串口&#xff0c;网口&#xff0c; Socket 等。这些协议与 Http 测试方法类似&#xff08;具体查看接口自动化测试章节&#xff09;&#xff0c;但在测…

函数式编程-Stream流学习第二节-中间操作

1 Stream流概述 java8使用的是函数式编程模式,如同它的名字一样&#xff0c;它可以用来对集合或者数组进行链状流式操作&#xff0c;让我们更方便的对集合或者数组进行操作。 2 案例准备工作 我们首先创建2个类一个作家类&#xff0c;一个图书类 package com.stream.model;…

VMware软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 VMware软件是一种虚拟化软件&#xff0c;可以将一台计算机分成多个虚拟机&#xff0c;每个虚拟机都可以运行独立的操作系统和应用程序&#xff0c;从而实现多个不同的工作环境共用同一台硬件设备。以下是关于VMware软件的详细介…

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

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

Java进阶篇--进程和线程的区别

进程和线程 进程 在一个操作系统中&#xff0c;每个独立执行的程序都可称之为一个进程&#xff0c;也就是“正在运行的程序”。目前大部分计算机上安装的都是多任务操作系统&#xff0c;即能够同时执行多个应用程序&#xff0c;最常见的有Windows、Linux、Unix等。比如在Wind…

最新社会工程学技术

人本身是防御体系中最大的漏洞。由于人心的不可测性&#xff0c;决定了无法像修补漏洞一样对人打补丁&#xff0c;只能通过后天培养安全意识来预防这种情况发生。虽然社会工程学的本质是心理战术&#xff0c;但是可以使用很多技术手段进行辅助&#xff0c;本节介绍社会工程学常…

REDIS 7 教程 数据类型-进阶篇

⑥ *位图 bitmap 1. 理论 由0和1 状态表现的二进制位的bit 数组。 说明:用String 类型作为底层数据结构实现的一种统计二值状态的数据类型 位图本质是数组,它是基于String 数据类型的按位操作。该数组由多个二进制位组成,每个二进制位都对应一个偏…

合并两个链表

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 比如以下例子&#xff1a; 题目接口&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListN…

nodejs+vue+elementui农业产品信息网上商城管理系统_9927h

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui,系统使用权限分别包括管理员、种植户和用户&#xff0c;其中管理员拥有着最大的权限&#xff0c;同时管理员的…

C++初学者学习指南

文章目录 环境职业选择基本技能新特性与学习曲线高阶技能C模版元编程线程池&#xff0c;异步任务 C 相关工具及资源C ToolsC Resources 项目大项目小项目 如何学未来期望 环境 编程工具&#xff1a;VSCode插件&#xff1a; BazelC/CClang-FormatVim 职业选择 AI领域&#xf…

大学英语赛道情报分析——全国大学生英语竞赛

竞赛简介 竞赛简介更多>全国大学生英语竞赛每年一届&#xff0c;自1999年创办以来至今已连续举办二十三届&#xff0c;得到了各省、自治区、直辖市大学外语教学研究会和各高校师生的大力支持&#xff0c;每年全国共有31个省&#xff08;自治区、直辖市&#xff09;的一千二百…

设计模式之工厂模式(万字长文)

文章目录 概述工厂模式的优点包括工厂模式有几种主要的变体看一个具体需求使用传统的方式来完成传统的方式的优缺点 简单工厂模式基本介绍使用简单工厂模式简单工厂模式的优缺点优点&#xff1a;缺点&#xff1a; 工厂方法模式看一个新的需求思路 1思路 2工厂方法模式介绍工厂方…

安达发|关于MES制造执行系统成功实施的经验分享

智能制造”热潮席卷神州大地&#xff0c;在国家的大力推进下&#xff0c;建设智能工厂&#xff0c;推进智能制造已成为制造企业共同的目标。作为承上启下的车间级综合信息系统&#xff0c;MES系统得到了制造企业的广泛关注&#xff0c;市场变得异常火热。 但是&#xff0c;MES系…

解决IndexError: index 0 is out of bounds for axis 1 with size 0

标题 引言问题背景解决思路如何防止总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d;…

mysql 查询的字段值太长显示不全 group_concat

当前这个字段非常的长&#xff0c;在数据库看的时候也只是显示一部分内容&#xff0c;这是由于group_concat的group_concat_max_len参数的值太小造成的&#xff0c;默认值如下&#xff1a; show VARIABLES like group_concat_max_len 我们需要将这个值调大一点就可以解决上面这…

如何搭建智能家居系统并通过内网穿透实现远程控制家中设备

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 前言 Home Assistant&…