Maven 概述、安装、配置、仓库、私服详解

目录

1、Maven 概述

1.1 Maven 的定义

1.2 Maven 解决的问题

1.3 Maven 的核心特性与优势

2、Maven 安装

2.1 下载 Maven

2.2 安装配置 Maven

2.3 测试安装

2.4 修改 Maven 本地仓库的默认路径

3、Maven 配置

3.1 配置本地仓库

3.2 配置 JDK

3.3 IDEA 配置本地 Maven

4、Maven 仓库

4.1 仓库的概念

4.2 仓库的分类

4.3 本地仓库

4.4 远程仓库

4.4.1 中央仓库

4.4.2 公共仓库

4.4.3 私服

五、Maven 私服详解

5.1 私服的概念

5.2 私服的架构


1、Maven 概述

写项目时,我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

1.1 Maven 的定义

Maven 是一个基于项目对象模型(POM)概念的纯 Java 开发的开源项目管理工具,主要用于管理 Java 项目,进行依赖管理(jar 包依赖管理)和项目构建(项目编译、打包、测试、部署),还能实现分模块开发,提高开发效率。

1.2 Maven 解决的问题

在传统项目开发中,存在诸多项目管理问题:

  • 繁琐:每个项目都需要手动导入所需的 jar 包,且要搜集全部相关 jar 包。
  • 复杂:项目中的 jar 包若需要版本升级,需重新搜集新的 jar 包。
  • 冗余:相同的 jar 包在不同项目中重复保存,占用大量空间。

1.3 Maven 的核心特性与优势

  • 依赖管理:通过在 pom.xml 文件中添加 jar 包的坐标,而非直接将 jar 包导入工程,避免了 jar 包直接引入的问题。当需要使用 jar 包时,Maven 会根据坐标到仓库中查找并获取。
  • 一键构建:项目从编译、测试、运行、打包、安装到部署的整个构建过程都可由 Maven 管理,使用一个命令即可轻松完成。
  • 分模块开发:常用于大型项目,可按层(如 dao、service、web)或按业务(如用户管理、订单管理、支付管理等)进行模块划分,提高开发效率。

2、Maven 安装

2.1 下载 Maven

进入Maven官网https://maven.apache.org/,按下图依次操作。

默认下载最高版本,如果需要下载其他版本,请页面下滑找到这个:

 

2.2 安装配置 Maven

 Maven安装的前提需要先安装配置jdk

win+R输入cmd打开终端,查看jdk是否安装,如果没有显示版本号,请先安装jdk,安装时请注意jdk版本和maven的兼容要求。

 找到“查看高级系统设置”,

2.3 测试安装

在cmd命令行窗口,输入指令mvn -v回车, 如下图所示,说明环境变量配置成功。 

2.4 修改 Maven 本地仓库的默认路径

在Maven安装的根目录下,创建文件夹"repository"。

3、Maven 配置

3.1 配置本地仓库

在 Maven 的 conf 目录中有 settings.xml 配置文件,可按如下方式配置本地仓库:

3.2 配置 JDK

在 settings.xml 文件的profiles标签中增加一个profile标签,限定 Maven 项目默认的 JDK 版本:

<profiles><!-- java版本 --><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></profiles>
</profiles>

3.3 IDEA 配置本地 Maven

打开 IDEA(此处以2025.1.1.1版为例) ,按下图依次操作

4、Maven 仓库

4.1 仓库的概念

仓库是存储依赖的地方,体现为本地的一个目录。仓库中不仅存放依赖,还管理着每个依赖的唯一标识(坐标),Java 项目凭借坐标获取依赖。

4.2 仓库的分类

Maven 中的仓库主要分为本地仓库和远程仓库:

  • 本地仓库:用于存储从远程仓库或中央仓库下载的插件和 jar 包。项目使用插件或 jar 包时,会优先从本地仓库查找。默认本地仓库位置在${user.dir}/.m2/repository,也可在 settings.xml 文件中配置。
  • 远程仓库:若本地仓库中没有所需的插件或 jar 包,默认会从远程仓库下载。远程仓库可以在互联网内,也可以在局域网内,包括中央仓库、公共仓库和私服等。

4.3 本地仓库

即在 settings.xml 中配置的目录,使用过的依赖会自动存储在本地仓库中,以便后续复用。

4.4 远程仓库

4.4.1 中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,无需任何配置,Maven 中内置了中央仓库的地址http://repo1.maven.org/maven2。其中包含了绝大多数流行的开源 Java 构件,可通过https://mvnrepository.com/搜索需要的依赖信息。

4.4.2 公共仓库

除中央仓库外,还有其他远程仓库,如阿里云仓库http://maven.aliyun.com/nexus/content/groups/public/。由于中央仓库在国外,下载依赖速度较慢,因此通常会配置一个国内的公共仓库替代中央仓库。在 settings.xml 中添加如下配置:

<!--setting.xml中添加如下配置-->
<mirrors><mirror><id>aliyun</id>  <!-- 中心仓库的 mirror(镜像) --><mirrorOf>central</mirrorOf>    <name>Nexus aliyun</name><!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库--><url>http://maven.aliyun.com/nexus/content/groups/public</url>  </mirror>
</mirrors>
4.4.3 私服

私服是架设在局域网的一种特殊远程仓库,目的是代理远程仓库及部署第三方构件。有了私服后,Maven 下载依赖时直接请求私服,私服上存在则下载到本地仓库;否则,私服会请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。私服可以解决企业开发中每次下载 jar 包只能自己使用,不能被其他开发人员使用的问题。可以通过 Nexus来创建、管理一个私服。

五、Maven 私服详解

5.1 私服的概念

私服是公司范围内共享的仓库,不对外开放,可通过 Nexus 等工具创建和管理。Maven 私服的概念就是在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库。当我们需要下载一些构件(artifact)时,如果本地仓库没有,再去私服下载,私服没有,再去中央仓库下载。

5.2 私服的架构

我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如 Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。Nexus 是一个专门的 Maven 仓库管理软件,它不仅能搭建 Maven 私服,还具备如下一些优点使其日趋成为最流行的 Maven 仓库管理器:

  • 提供了强大的仓库管理功能,构件搜索功能
  • 它基于 REST,友好的 UI 是一个 ext.js 的 REST 客户端
  • 它占用较少的内存
  • 基于简单文件系统而非数据库

平时我们用的是阿里的共用maven服务器,但是在公司时,我们需要用到公司自研的jar包,这些jar包是私有的,所以在阿里的共用maven服务器中找不到,虽然我们也可以那个u盘来拷贝公司的私有jar包,但公司人这么多,一个个拷贝就太慢了,可以使用nexus搭建一个公司的私服,只需要连接公司的内网,配置好maven的settings.xml就可以在nexus中下载自己需要的jar包了

参考链接:

【附安装包】Maven下载、安装、配置与使用(保姆级教程)_java_程序员钟霖-GitCode 开源社区

【maven】最全Maven详解,看这一篇就够啦_maven大全-CSDN博客

使用Nexus搭建Maven私服教程(附:nexus上传、下载教程)_nexus maven-CSDN博客

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

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

相关文章

Unity使用代码分析Roslyn Analyzers

一、创建项目&#xff08;注意这里不要选netstandard2.1会有报错&#xff09; 二、NuGet上安装Microsoft.CodeAnalysis.CSharp 三、实现[Partial]特性标注的类&#xff0c;结构体&#xff0c;record必须要partial关键字修饰 需要继承DiagnosticAnalyzer 注意一定要加特性Diagn…

knife4j:4.3.0 default-flat-param-object: true 没有生效

Get 方式请求 前端接口文档中的键值对方式&#xff08;get&#xff09;发送对象参数&#xff0c;将对象请求参数展开

C++.OpenGL (15/64)Assimp(Open Asset Import Library)

Assimp(Open Asset Import Library) 3D模型加载核心流程 #mermaid-svg-cKmTZDxPpROr7ly1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cKmTZDxPpROr7ly1 .error-icon{fill:#552222;}#mermaid-svg-cKmTZDxPpROr…

课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-第一周part2 人工智能术语人工智能公司应该怎么做

人工智能术语&人工智能公司应该怎么做 一、人工智能术语 1.机器学习&#xff1a; 让电脑能够不用开发软件&#xff0c;而自主获取某种能力的研究领域。 2.数据科学&#xff1a; 从数据中提取知识和见解的科学&#xff1b; 3.深度学习&#xff1a; 度学习是一种机器…

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…

鸿蒙开发——如何修改模拟器的显示图标/标题

1.图标 第一步&#xff1a;将你所需要的图标方到src/main/resources/base/media下 第二步&#xff1a;找到entry项目下面的src/main/module.json5 第三步&#xff1a;将原来的 "icon": "$media:layered_image", 切换成 "icon": "$media…

音乐“穿梭机”AudioRelay,让你的音频“无缝对接”

嘿&#xff0c;小伙伴们&#xff01;今天电脑天空给大家安利一款超神奇的音频小能手——AudioRelay&#xff01;要是你和我一样&#xff0c;经常在各种设备之间“折腾”音频&#xff0c;那这玩意儿绝对能让你眼前一亮。 你有没有遇到过这样的烦心事儿&#xff1f;电脑里正放着…

Chrome二级标签无法选中的解决方案

问题描述 近段时间&#xff0c;我的chrome软件选择标签时候&#xff0c;发现&#xff0c;二级文件夹下的标签都无法选中。并且右上角三个点里面书签的下辖子项目也根本无法选中。这就导致我连目录也无法导出来。后来发现ctrlshiftO才调出来书签界面&#xff0c;导出了chrome的…

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:

CppCon 2015 学习:The Importance of Being const

const 的意义与作用 “const 让你可以同时向编译器和其他程序员说明&#xff1a;这个值应该保持不变。只要这种情况成立&#xff0c;你就应该明确地使用 const&#xff0c;因为这样可以让编译器帮你确保这个约束不会被破坏。” 逐句解释&#xff1a; 使用 const&#xff0c;你…

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …

网格三面角,散射过程推导

电场矢量本身只有一个方向&#xff0c; 下面对其分解为v矢量方向和h矢量方向。分解成两个电场矢量方向 又再次分解为坐标矢量方向 本段是V极化说在平面在xz坐标平面上&#xff0c;h极化只有y分量&#xff0c;注意这分析方法 反射波矢量仍在XZ坐标面上&#xff0c;&#xff08…

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…

Linux共享内存原理及系统调用分析

shmget 是 System V 共享内存的核心系统调用之一&#xff0c;其权限位&#xff08;shmflg 参数&#xff09;决定了共享内存段的访问控制和创建行为。以下是权限位的详细解析&#xff1a; 权限位的组成 shmflg 参数由两部分组成&#xff1a; 权限标志&#xff08;低 9 位&…

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…

Vue3 + TypeScript + Element Plus 设置表单中日期控件的宽度

需要设置日期控件的宽度 要设置 el-date-picker 的宽度&#xff0c;可以通过以下方法实现&#xff08;推荐方法1或2&#xff09;&#xff1a; 方法1&#xff1a;使用内联样式&#xff08;最直接&#xff09; 直接在组件上添加 style"width: 100%"&#xff1a; htm…

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…

25.6.9学习总结

A. 误报&#xff08;False Alarm&#xff09; A. 误报&#xff08;False Alarm&#xff09;https://codeforces.com/contest/2117/problem/A 时间限制&#xff1a;1 秒 内存限制&#xff1a;256 兆字节 Yousef 站在一个长走廊的入口处&#xff0c;面前有 n 扇门 &#xff0c…

高并发内存池的轻量级模拟-细节处理与优化部分

一.当申请的内存大小大于256kb的处理方式 因为256kb对于我们当前的实现其实也就32页,我们的页缓存上限是128页.所以思路非常清晰明了:当申请内存大小大于32页同时小于等于128页时,我们按照一页的方式向上对齐后计算所需页数,然后向页缓存申请.而大于128页的请求我们直接向堆申请…