弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异

简介: 弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异

repository 仓库

  • 本地仓库

本机一般 .m2
本地仓库地址可以在 settings.xml 里边指定

  • 远程仓库

比如公司私有仓库
pom 可以通过配置多个 repository 来,如果好多项目共用的话,可以在 settings 文件配置 profile,这样新项目就不需要重复配置 repository 了

  • 中央仓库

maven 必须至少知道一个远程仓库,中央仓库就是默认的仓库,不需要显示配置在maven 的 super pom 中配置的
兜底用的,找不到的 jar 会找它

如果中央仓库慢可以用 mirrors 来替换它,它的 id 是 central,在 mirrorOf 标签中配置它的标签就是替换了


仓库在哪里配置

可以在 settings 或者 pom.xml 中配置
可以嵌入到 profile 中,也可以单独通过 repository 配置然后 profile 通过 id 引用


谁用仓库

profile (构建) 标签会指定仓库
下载 jar 会有一个默认的搜索顺序,见 repo 优先级


server 和 repository如何关联

通过 distributionManagement 标签根据 id 关联起来

依赖仓库的配置方式

  • 中央仓库,这是默认的仓库
  • 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置
  • 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置
  • 项目仓库,通过 pom.xml 中的 project.repositories.repository 配置
  • 项目profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
  • 本地仓库

依赖优先级关系由近(本地仓库)及远(中央仓库)

强烈注意: 你的 maven 的环境变量会覆盖一切. 当你发现你修改 settings 不生效的时候,检查下你的 maven home 配置


repo 优先级

本地仓库jar>global settings active profile> user settings active profile>pom profile>pom repo>user mirror>global mirror
pom中的repo配置高于user/global settings中的mirror
user/global settings中的activa profile高于pom中的repo
global settgings中的active profile高于user settings中的active profile
user settings active profile高于mirror(checked)
但是settings定位不同,它倾向于提供一些公共的附属信息,而不是个性化的构建信息.它会

尽量融合到你的pom中。


mirror镜像又是个什么东西

就是一个备份或冗余.并且你有的我也有并且我比你快
用镜像仓库替代默认的远程仓库

用来替代在 pom 中 repository 定义的仓库(miorrorOf 标签通过唯一的仓库 id)
maven 的中央仓库 id 是 central(在 super pom 中配置)

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

如果你不是以上两个目的就不用配置镜像了


mirror优先级

见 repo 优先级
pom 不支持配置


profile是个什么东西

定义构建程序的资源和配置,如:    - 远程仓库列表
    - 构建时本地路径及远程路径
    - 唯一标志
    - 自动触发逻辑
    - 扩展属性列表
    - 插件仓库列表

profile通过什么配置

在settings和pom都可以配置
但是settings只能提供给pom: repository,plugin repository,以及free-form properties供pom使用
可以理解为setting的profile是对pom中的profile信息的补充以达到build的目的

profile在哪里配置以及有什么区别

在settings和pom都可以配置但是settings只能提供给pom: repository,plugin repository,以及free-form properties供pom使用可以理解为setting的profile是对pom中的profile信息的补充以达到build的目的


profile 相关标签说明

  • activation

自动触发/激活 profile 的条件逻辑
不是激活profile的唯一方式,还可以通过命令行-P yourWantedtoActiveProfile,anotherProfiletoActive

可以配置自动激活条件特别多,具体参考文档

mvn help:active-profiles
  • properties

对profile的扩展,配置一些属性值${x}

<!-- 
  1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。
  2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。
  3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。
  4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。
  5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。
  ex.   <user.install>${user.home}/our-project</user.install>
 -->

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

  • profile 中 Repositories

远程仓库列表,它是 maven 用来填充构建系统本地仓库所使用的一组远程仓库。

远程仓库唯一标志/名称
release/snapshots 配置
远程仓库 url

  • pluginRepositories

maven插件的仓库

  • activeProfiles

手动激活profiles的列表,配置的是在pom中配置的profile的id
按照profile被应用的顺序定义activeProfile

不管在哪里配置的profile都记得要激活
pom 激活方式

<activation>
    <activeByDefault>true</activeByDefault>
</activation>

settings 激活方式

<activeProfiles>
    <activeProfile>
      profile_user_settings
    </activeProfile>
</activeProfiles>


与 pom 中 profile 的区别与联系

settings.xml 中的 profile 元素是 pom.xml 中 profile 元素的裁剪版本
它包含了 id、activation、repositories、pluginRepositories 和 properties 元素。
这里的 profile 元素只包含这五个子元素是因为这只关心构建系统这个整体

如果一个 settings.xml 中的 profile 被激活,它的值会覆盖任何其它定义在 pom.xml 中带有相同 id 的 profile。
settings 的 profile 一般是个 pom 的 profile 提供补充信息, 一般是公共的,适合所有项目的


settings 文件是个什么东西

从 settings.xml 的文件名就可以看出,它是用来设置 maven 参数的配置文件。并且,
settings.xml 是 maven 的全局配置文件。而 pom.xml 文件是所在项目的局部配置。
Settings.xml 中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。


settings.xml 文件位置

settings.xml 文件一般存在于两个位置:
全局配置: ${M2_HOME}/conf/settings.xml
用户配置: 𝑢𝑠𝑒𝑟.ℎ𝑜𝑚𝑒/.𝑚2/𝑠𝑒𝑡𝑡𝑖𝑛𝑔𝑠.𝑥𝑚𝑙𝑛𝑜𝑡𝑒:


settings和pom之间的关系

settings 偏向于全局配置
一般 pom 的优先高于settings,但是他们之间的信息是相互引用的


Servers是个什么东西

如果需要用户名和密码就需要配置下 server,不适合放在 pom 中,一般定义在 settings 中,由 pom 去引用

仓库的下载和部署是在 pom.xml 文件中的 repositories 和 distributionManagement 元素中定义的。


server 如何跟 repository 关联

该 id 与 distributionManagement 中 repository 元素的 id 相匹配


repository/profile 标签

profile 可以再 settings 和 pom 中配置
repository 无法单独在 settings中 配置,不报错不生效,但是可以配置到 profile 中


repository 和 profile 的关系

profile 会用到 repository
repository 也可以单独配置


settings 和 pom优先级

要看具体标签来定
profile 是 settings 的优先级最高
见 repo 优先级


settings 和 pom 之间的关联

一般是 pom 会取用 setttings 中的配置
settings 一般全局和公共的配置


Mirrors

用来替代某个仓库的,一般替代中央仓库,但是不局限于替代它。可以替代一切仓库
mirrorOf 来指定仓库 id,这个 id 是 pom 文件中 repository 的 id


mirrofOf 标签

mirrofOf 在哪配置

mirrorOf 配置内容含义是什么

mirrorOf 标签里面放置的是 repository 配置的 id,为了满足一些复杂的需求,Maven还支持更高级的镜像配置


mirrorOf 配置规则

external:* = 不在本地仓库的文件才从该镜像获取
repo,repo1 = 远程仓库 repo 和 repo1 从该镜像获取
*,!repo1 =  所有远程仓库都从该镜像获取,除 repo1 远程仓库以外
* = 所用远程仓库都从该镜像获取
maven的中央仓库id是central, 所以mirrorOf配置为central就达到了替换maven仓库的目的

repostitory mirror profile关系

repository 就是 jar 包的库
mirror 可以替换某个 repository
profile 里面需要包含某个 repository


配置镜像仓库

在 settings.xml 全局配置

<mirrors>    <mirror>
        <id>aliyun</id>
        <name>aliyun</name>
        <mirrorOf>central</mirrorOf>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
</mirrors>


仓库优先级(访问不通或者 jar 不存在自动切换)

见 repo 优先级

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
704 27
|
11月前
|
Java 应用服务中间件 Apache
在IntelliJ IDEA中使用Maven配置Tomcat环境
此配置方法具有较高的实用性,简单易懂。遵循以上步骤,您将能顺利在IntelliJ IDEA中使用Maven配置Tomcat环境,从而进行Web项目的开发和调试。
1346 18
|
存储 Java Linux
【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源
Maven插件安装,Maven项目构建,依赖管理,Haven Help插件,Maven仓库,Maven如何设置国内源
|
Java Shell 应用服务中间件
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
这篇文章介绍了如何在Mac系统下配置Java JDK、Maven和Tomcat的环境变量,包括配置文件的选择、解决环境变量在zsh shell中无效的问题、查看和设置系统环境变量的方法,以及JDK和Maven的下载、配置和测试步骤。
6506 1
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
2434 3
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
1178 1
|
9月前
|
Java 区块链 Maven
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
685 3
|
8月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
420 0
|
Java Maven 开发者
maven项目中官方setting.xml文件
`settings.xml` 是 Maven 的配置文件,用于定义用户或全局级别的构建行为。它包含本地仓库路径、网络代理、服务器认证、仓库镜像及构建配置文件等设置,帮助开发者根据环境定制 Maven 行为,提升构建效率与灵活性。
1489 0
|
11月前
|
Java 测试技术 项目管理
【JavaEE】从 0 到 1 掌握 Maven 构建 Java 项目核心技巧 解锁 Java 项目高效管理实用实例
本文从Maven基础概念讲起,涵盖安装配置、核心概念(如POM与依赖管理)及优化技巧。结合Java Web项目实例,演示如何用Maven构建和管理项目,解决常见问题,助你高效掌握这一强大工具,提升Java开发与项目管理能力。适合初学者及进阶开发者学习。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
346 6