当前位置: 首页 > news >正文

maven一点通

1.maven简介

Maven是一个基于Java的工程构建工具,用于管理和构建项目的依赖关系。它提供了一种标准的项目结构和一组约定,使得项目的开发、构建、部署和文档化更加容易和可靠。

Maven的主要功能包括:

  • 依赖管理:Maven可以自动下载和管理项目所需的依赖库。通过声明项目的依赖关系,Maven可以自动解决依赖冲突,并下载和安装所需的库。

  • 构建管理:Maven可以自动执行项目的构建过程,包括编译、测试、打包、部署等操作。Maven使用插件来执行这些操作,可以根据项目的需要灵活配置和扩展。

  • 团队协作:Maven支持多人协作开发,可以通过中央仓库和本地仓库共享项目的依赖库。同时,Maven提供了一些插件,可以用于集成和持续集成等开发实践。

2.生命周期

Maven生命周期是指Maven构建过程中的一系列阶段,每个阶段执行不同的任务。Maven生命周期分为三个主要阶段:Clean(清理)、Build(构建)和Site(站点)。

  1. Clean阶段:在这个阶段,Maven会清理项目中的所有生成的文件,以确保从一个干净的状态开始构建。主要包括清理输出目录和临时文件等。clean阶段只有一个目标:clean。

  2. Build阶段:这个阶段是Maven构建的核心阶段。它包括了项目的编译、测试、打包等操作。

    • validate:验证项目是否正确且是否可以构建。
    • compile:编译项目的源代码。
    • test:运行项目的单元测试。
    • package:将编译后的源代码打包成可分发的格式,如JAR、WAR等。
    • install:将打包好的文件安装到本地仓库,供其他项目使用。
    • deploy:将打包好的文件部署到远程仓库,供其他开发人员使用。
  3. Site阶段(冷门功能):这个阶段用于生成项目的站点文档,包括项目的API文档、用户手册等。它可以生成静态HTML或者部署到web服务器上。

    • site:生成项目的站点文档。
    • site-deploy:将站点文档部署到web服务器上。

每个阶段都由一个或多个插件来执行,这些插件在Maven的POM文件中配置。

Maven的生命周期是顺序执行的,你可以选择在某个生命周期中定义特定的插件执行某个任务。例如,在Build阶段的compile阶段可以配置编译插件,test阶段可以配置测试插件来运行单元测试。

3.下载与安装

3.1官网下载

大部分Java IDE都有一个嵌入式maven,例如IDEA。如果不需要命令行操作,则无需额外下载。

maven本身是java开发的,必须先安装jdk环境。

官网下载 -->  maven

下载之后,解压缩到指定目录即可。

3.2配置环境变量

如果需要在命令行操作,则需要配置环境变量(以win10系统做演示)。

3.2.1.前往系统属性,我的电脑->计算机->系统属性

3.2.2.搜索环境变量 

3.2.3.配置环境变量

新增环境变量,命名为MAVEN_HOE,指向maven的安装目录 (不包含bin目录

 Path环境变量添加一项,“%MAVEN_HOME%\bin

3.2.4.验证环境变量,命令行输入 "mvn -version"

3.2.5修改本地仓库地址

maven默认本地仓库地址为:usr/.m2/repository。由于本地仓库的默认位置是在用户的家目录下,一般在C盘。随着时间推移,仓库体积越来越庞大,影响系统性能。所以强烈建议将 Maven 的本地仓库放在其他驱动盘。maven安装目录config下的settings.xml文件,修改<localRepository>标签,指向新目录。

3.2.6修改远程仓库镜像地址

Maven中央仓库在境外,而国外网站速度很慢。可改成阿里云(或腾讯云等)提供的镜像仓库,提高下载速度。配置的方式也在settings.xml文件里。

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

4.maven核心概念

4.1项目对象模型(POM)

POM是Maven项目的核心文件,以XML格式编写。它定义了项目的基本信息、依赖关系、构建配置等。POM文件必须位于项目根目录下,并且命名为pom.xml。

4.2坐标(Coordinate)

坐标用于唯一标识一个Maven项目或者项目的依赖关系。坐标包括groupId、artifactId和version三个元素。groupId用于标识项目所属的组织或者团队,artifactId用于标识项目的名称,version用于标识项目的版本号。

4.3插件(Plugins)

Maven插件是用于执行项目构建过程中的具体任务的工具。Maven有很多内置插件,也可以自定义插件。插件的执行由Maven生命周期的不同阶段触发。

4.4构建目录结构

Maven推荐的项目目录结构有一定的约定,包括src/main/java用于存放项目的源代码,src/test/java用于存放单元测试代码,以及其他一些目录用于存放配置文件、资源文件等。

4.5依赖范围

  • compile(默认): 该依赖项在编译、测试和运行时都可用。

  • test: 该依赖项只在测试阶段可用,不会被打包到生成的项目中。

  • provided: 该依赖项在编译和测试阶段可用,但在运行时由JDK或某个服务器提供。比如servlet-api可以由服务器提供。

  • runtime: 该依赖项在运行时可用,但不参与编译和测试阶段。

  • system: 该依赖项类似于provided,但需要手动提供jar文件的路径。不推荐使用该范围。

  • import: 该依赖项只用于父项目的dependencyManagement部分。它引入了一个外部项目的依赖管理。

4.6依赖传递

Maven依赖传递是指当一个项目依赖于其他项目时,它将自动获取所依赖项目的依赖项。Maven使用依赖传递来管理项目依赖关系并确保所有需要的依赖项都被正确地获取和使用。

依赖传递有以下几个特点:

  1. 传递性:如果项目A依赖于项目B,而项目B又依赖于项目C,则项目A将间接依赖于项目C。Maven会自动解析和获取项目C的依赖项。

  2. 依赖冲突解决:当多个依赖项具有相同的groupId和artifactId,但版本不同时,Maven将根据一定的冲突解决策略选择一个版本。默认情况下,它选择最近的版本。

  3. 排除依赖项:有时候,可能需要排除某个依赖项的传递性依赖,在pom.xml文件中使用<exclusions>标签可以指定需要排除的依赖项。

4.7依赖冲突

4.7.1依赖冲突选择策略

由于依赖的传递性,导致不同依赖的子依赖会出现版本问题,有可能你以为依赖了版本2.1,但因为出现冲突,实际生效的版本是1.2。

Maven有一套依赖冲突解决策略来处理这种情况,它根据以下几个原则选择一个版本:

  1. 最短路径优先原则:Maven会选择离项目最近的依赖项路径中的版本。也就是说,如果项目直接依赖于一个版本,而间接依赖于另一个版本,那么直接依赖的版本将被选择。

  2. 第一声明优先原则:如果两个依赖项具有相同的路径长度,那么首次声明的版本将被选择(按照pom的依赖申明顺序)。

  3. 显式声明优先原则:如果两个依赖项具有相同的路径长度和首次声明顺序,那么Maven会选择在项目pom.xml文件中显式声明的版本。

4.7.2IDEA自带依赖分析工具

IDEA可以通过依赖分析工具,查询指定依赖的上级以及下级依赖,如此可以排除一些版本冲突。

4.7.2IDEA插件市场搜索分析插件

IDEA还可以从插件市场下载分析插件,点击Files->Settings->plugins,搜索“maven helper”

5.多模块继承与聚合

5.1多模块继承

在Maven中,继承指的是使用父项目定义的配置信息来为子项目提供默认的配置。这种继承关系可以帮助开发者减少重复的配置,并确保子项目与父项目保持一致的构建方式。maven子模块可以继承的有以下内容。

  • 配置
  • 依赖声明
  • 插件声明

5.2多模块聚合

在Maven中,聚合(aggregation)是一种将多个相关的项目组合在一起管理的方式。通过聚合,可以将多个项目作为一个整体来构建、测试和部署,简化了多项目管理的复杂度。

要实现项目的聚合,需要创建一个父项目(也称为聚合项目),并在父项目的pom.xml中声明子项目。父项目可以是一个普通的Maven项目,其packaging类型可以是pom,jar,war或其他类型。

例如jforgame的配置。在根目录下执行mvn package install命令的时候,会递归把所有子模块都打包安装到本地maven仓库,非常方便。例如jforgame的parent模块。

    <modules><module>jforgame-hotswap</module><module>jforgame-commons</module><module>jforgame-orm</module><module>jforgame-demo</module><module>jforgame-codec-parent</module><module>jforgame-socket-parent</module></modules>

详情可参考-->   Maven模块化最佳实践

相关文章:

maven一点通

1.maven简介 Maven是一个基于Java的工程构建工具&#xff0c;用于管理和构建项目的依赖关系。它提供了一种标准的项目结构和一组约定&#xff0c;使得项目的开发、构建、部署和文档化更加容易和可靠。 Maven的主要功能包括&#xff1a; 依赖管理&#xff1a;Maven可以自动下载…...

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题&#xff0c;在查找资料时&#xff0c;恰好看到机器学习中的无监督学习的聚类分析&#xff0c;正好适用于我的问题&#xff0c;但是我之前学机器学习时。正好没有学习无监督部分&#xff0c;因为我认为绝大多数问题都是有标签的监督学习&#…...

linux板子vscode gdb 远程调试

板子&#xff1a;hi3556v200 交叉编译工具&#xff1a;arm-himix200-linux 主机&#xff1a;win10虚拟机的ubuntu16.4 gdb:gdb-8.2.tar.gz 1.在ubuntu交叉编译gdb&#xff08;Remote g packet reply is too long解决&#xff09; 建议修改gdb8.2/gdb目录下面的remote.c解决…...

nginx代理服务器配置

nginx代理服务器配置 需要配置环境需求 1、一台1.1.1.1服务器&#xff0c;一台2.2.2.2服务器 前端包路径在1.1.1.1 /etc/dist 下 后端服务在2.2.2.2 上 暴露端口为9999 2、需求 现在需要访问 1.1.1.1:80访问到2.2.2.2 上面的9999后端服务 3、配置nginx ①&#xff1a;在…...

基于Matlab的视频人面检测识别,Matalb实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…...

VSCode创建用户代码片段-案例demo

示例 - 在线生成代码片段 Vue3代码片段 {"vue3": {scope": "javascript,typescript,html,vue","prefix": "vue3","body": ["<template>","$1","</template>",""…...

河南大学-数字图像处理-图像变换

计算机与信息工程学院实验报告 序号&#xff1a;20 姓名&#xff1a;__杨馥瑞___ 学号&#xff1a;_2212080042_ 专业&#xff1a;__数据科学与大数据技术 年级&#xff1a;___2022级_____ 课程&#xff1a;数字图像处理 主讲教师&#xff1a;张延锋 辅导教师&#x…...

华为OD七日集训第3期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 3 期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、字符串处理第3天、矩阵第4天、深度优先搜索dfs算法第5天、回溯法第6天、二分查找第7天、图、正则表达式 大家好&#xff0c;…...

Android中的进程间通讯

一、简介 进程间通讯&#xff08;InterProcess Communication&#xff09; 指在不同进程之间传播或交换信息&#xff0c;Android是基于Linux 系统的&#xff0c;在Linux 中进程间是不能直接通讯的&#xff0c;IPC就是为了解决这一问题 每个操作系统都有相应的IPC机制&#x…...

day03vue学习

day03 一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.综合案例-小黑记账清单 列表渲染添加/删除饼图渲染 3.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 4.综合案例-小兔仙首页 拆分模块-局部注册结构样式完善…...

32. 最长有效括号

给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1a;2 解释&#xff1a;最长有效括号子串是 "()"示例 2&#xff1a; 输…...

如何在 docker 容器内部运行 docker命令

场景&#xff1a; 有些场景在容器内部需要调用 docker 命令。为此&#xff0c;本文梳理2种可以在容器内部执行docker命令的方法。 方法1&#xff1a;基于 docker.sock /var/run/docker.sock是默认的Unix socket(套接字)&#xff0c;socket是同一机器中进程间通讯的一种方式。…...

Poly Kernel Inception Network在遥感检测中的应用

摘要 https://export.arxiv.org/pdf/2403.06258 遥感图像&#xff08;RSI&#xff09;中的目标检测经常面临一些日益严重的挑战&#xff0c;包括目标尺度的巨大变化和多样的上下文环境。先前的方法试图通过扩大骨干网络的空间感受野来解决这些挑战&#xff0c;要么通过大核卷积…...

tiktok 与 赵长鹏 遭遇了什么

对于美丽国来说&#xff0c;比特币是国家资产&#xff0c;赵长鹏动了国家资产的奶酪&#xff0c;当然要被消灭&#xff1b;新闻媒体是国家资产&#xff0c;TIKTOK作为新兴媒体也动了国家资产的奶酪&#xff0c;当然也在消灭之列&#xff1b;高端芯片、波音飞机也是国家资产&…...

Lua中文语言编程源码-第七节,更改lstrlib.c 标准字符串操作与模式匹配库函数, 使Lua加载中文库关键词(标准字符串操作与模式匹配库相关)

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git在src文件夹下的lstrlib.c 标准字符串操作与模式匹配库函数&#xff0c;表明这个C源文件实现了Lua的标准字符串操作与模式匹配库&#xff0c;即提供了与字符串操作相关的API和功能实现…...

EtherCAT开源主站 IGH 介绍及主站伺服控制过程

目录 前言 IGH EtherCAT主站介绍 主要特点和功能 使用场景 SOEM 主站介绍 SOEM 的特点和功能 SOEM 的使用场景 IGH 主站 和 SOEM对比 1. 功能和复杂性 2. 资源消耗和移植性 3. 使用场景 EtherCAT 通信原理 EtherCAT主站控制伺服过程 位置规划模式 原点复归模式…...

自然语言:python实现自然语言处理中计算文件中的英语字母的熵

下面是一个示例代码&#xff0c;实现了计算文件中英语字母的熵的功能。 import mathdef calculate_entropy(text):# 统计字母的出现次数letter_count {}total_count 0for char in text:if char.isalpha():char char.lower()letter_count[char] letter_count.get(char, 0) …...

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…...

基于SpringBoot的后勤管理系统【附源码】

后勤管理系统开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myecli…...

智能仓储系统|基于JSP技术+ Mysql+Java+ Tomcat的智能仓储系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...