一文彻底搞懂Maven配置(终结版)
创始人
2025-06-01 01:30:43
0

下载安装

提示:安装之前需要先确认好自己需要哪个版本的maven,避免浪费时间。
官网下载:https://maven.apache.org/download.cgi
历史版本下载:https://archive.apache.org/dist/maven/maven-3/

maven配置setting.xml

该值表示构建系统本地仓库的路径

表示maven是否需要和用户交互以获得输入,
如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。

作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false。

作用:表示maven是否需要在离线模式下运行。
如果构建系统需要在离线模式下运行,则为true,默认为false。
当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。

作用:当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。
该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。
当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。
默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo。

作用:一般,仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。
然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,
这些信息可以配置在settings.xml中。

mirror可以拦截对远程仓库的请求,改变对目标仓库的下载地址。 mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。
当maven需要到的依赖jar包不在本地仓库时,就需要到远程仓库下载,这个时候如果maven的setting.xml中配置了镜像,而且镜像配置的规则中匹配到目标仓库时,maven就直接去镜像中配置的仓库地址进行依赖jar的下载,而不会去其他的地方进行下载。

镜像拦截规则说明
*匹配所有远程仓库。
external:*匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
repo1,repo2匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
*,!repo1匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

作用:根据环境参数来调整构建配置的列表。 settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。
它包含了id、activation、repositories、pluginRepositories和properties元素。这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。

test                       

作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。
该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的profile都会被激活。如果没有匹配的profile,则什么都不会发生。
例如,env-test是一个activeProfile,则在pom.xml(或者profile.xml)中对应id的profile会被激活。如果运行过程中找不到这样一个profile,Maven则会像往常一样运行。

子标签

作用:自动触发profile的条件逻辑。
如pom.xml中的profile一样,profile的作用在于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。
activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。

注:
在maven工程的pom.xml所在目录下执行help:effective-settings,点击运行,控制台会输出合并、覆盖之后最终的settings.xml文件
在maven工程的pom.xml所在目录下执行mvn help:active-profiles命令可以查看profile生效情况。

子标签

作用:远程仓库列表,它是maven用来填充构建系统本地仓库所使用的一组远程仓库。
maven里有两种仓库,本地仓库和远程仓库。 远程仓库相当于公共的仓库,大家都能看到。
本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。
当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。远程仓库既可以在setting.xml中配置也可以在工程的pom.xml文件里指定。

子标签

作用:对应profile的扩展属性列表。
maven属性和ant中的属性一样,可以用来存放一些值。这些值可以在pom.xml中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。

注:如果该profile被激活,则可以在pom.xml中使用${user.install}。

子标签

作用:发现插件的远程仓库列表。
和repository类似,只是repository是管理jar包依赖的仓库,pluginRepositories则是管理插件的仓库。
maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。

示例:



${user.home}/workspace/env/maven/repositorytruefalseserver_idauth_usernameauth_pwdpath/to/private_keysome_passphrase664775 sjtugmavensjtug maven proxyhttps://mirrors.sjtug.sjtu.edu.cn/maven-central/centralexample_proxyfalsehttpsproxy.molo.com443proxy_userproxy_pwd*.google.com|ibiblio.orgprofile_idfalse9.9Windows XPWindowsx865.1.2600mavenVersion2.0.3       /path/to/active_on_exists/path/to/active_on_missingthis.property.is.accessible.when.current.profile.activedmaven_repository_idmaven_repository_namehttp://host/mavendefaultfalsealwayswarn

总结:

mirror可以拦截对远程仓库的请求,改变对目标仓库的下载地址
镜像(Mirroring)是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

为什么配置镜像?

1.一句话,你有的我也有,你没有的我也有。(拥有远程仓库的所有 jar,包括远程仓库没有的 jar)
2.还是一句话,我跑的比你快。(有时候远程仓库获取 jar 的速度可能比镜像慢,这也是为什么我们一般要配置中央仓库的原因,外国的 maven 仓库一般获取速度比较慢)

如果你配置 maven 镜像不是为了以上两点,那基本就不用配置镜像了。(私服不用配置镜像^_^)

注意:当远程仓库被镜像匹配到的,则在 jar 包将从镜像仓库获取,而不是我们配置的 repository 仓库, repository 将失去作用

repository 仓库 可以配置在pom.xml也可以配置在setting.xml的标签下

如果使用私服,并且涉及到密码,就需要配置标签,
账号密码如何匹配仓库 server的标签与response的
同理如果使用了私服镜像,server的标签需要等于mirror的(注:一般使用了私服也不要使用镜像来拦截远程仓库了,直接使用response配置的私服地址即可^_^)

私服扩展

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。 有了私服之后,当 Maven
需要下载依赖时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
私服可以解决在企业做开发时每次需要的jar包都要在中心仓库下载,且每次下载完只能被自己使用,不能被其他开发人员使用
所谓私服就是一个服务器,但是不是本地层面的,是公司层面的,公司中所有的开发人员都在使用同一个私服
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。
安装,使用可以参考https://blog.csdn.net/m0_52994499/article/details/120640869

Maven关联私服

配置settings.xml,设置私服地址、认证等信息

 nexus-public admin admin123 


aliyunmaven*,!nexus-public阿里云公共仓库https://maven.aliyun.com/repository/public

 nexus   nexus-public Nexus Release Snapshot Repository http://localhost:8081/nexus/content/groups/public/true truealways     false    central  Maven Repository Switchboard  http://repo1.maven.org/maven2     nexus-public http://localhost:8081/nexus/content/groups/public/true true   

your other profilenexus

Maven项目部署到私服

执行 :mvn deploy 即可将项目部署到私服对应的仓库中,此时项目中的打包方式多为jar
但需要提前在项目的pom.xml中配置部署私服仓库位置,如下:

    ........nexus-public http://localhost:8081/nexus/content/repositories/releasesnexus-public http://localhost:8081/nexus/content/repositories/snapshots

Maven分模块开发

1.先创建父工程,pom.xml文件中,打包方式为pom
2.右键父工程创建子工程,dao工程和service工程打包方式为jar,web工程打包方式为war
3.每完成一个模块后需要install,如果在IDEA中install时报错(JDK版本过低),需要在父工程的pom.xml文件中配置如下代码

maven-compiler-pluginorg.apache.maven.plugins1.81.8UTF-8

参考
https://blog.csdn.net/m0_51527921/article/details/126580563
https://www.cnblogs.com/iceJava/p/10356309.html
https://blog.csdn.net/m0_52994499/article/details/120640869
https://blog.csdn.net/gaoyaopeng/article/details/114986275
https://blog.csdn.net/abu935009066/article/details/124206273

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...