[maven] maven settings.xml/pom.xml之repositories/pluginRepositories元素
0 序
repositories
针对项目本身的【JAR依赖】,通过repositories进行自定义配置。pluginRepositories
针对的是maven命令需要的【插件依赖】地址(比如clean、install都是maven的插件),通过pluginRepositories
进行自定义配置。
如果只配置了
repositories
,则:打包时,默认的【插件依赖】会从阿里云的仓库获取。
1 repositories标签
- Maven(Apache Maven)是一个流行的项目管理工具,广泛用于Java项目的构建、依赖管理以及项目生命周期的管理。
- 在Maven项目中,
pom.xml
文件是核心配置文件之一,而其中的repositories
元素以及Maven的全局配置文件(通常是settings.xml
)中的仓库配置则是关键的组成部分之一。
这两者在项目的依赖项解析过程中发挥着重要作用。本章将深入探讨它们之间的关系和调用顺序。
1.1 Maven 项目配置文件(pom.xml) 的 仓库配置元素(repositories)
1.1.1 repositories 元素的作用
pom.xml
文件中的repositories
元素用于定义Maven构建系统在构建项目时从哪里获取依赖项。这个元素是项目中声明依赖项的关键部分,它告诉Maven去哪里查找项目所需的库、框架等。
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<!-- 其他存储库的定义 -->
</repositories>
在这个例子中,
repositories
包含了一个名为 “central” 的远程存储库,该存储库的URL是Maven中央存储库的地址。项目构建时,Maven将会在这个存储库中查找项目所需的依赖项。
1.1.2 repositories 元素的优势
将项目依赖的存储库信息直接定义在 pom.xml 中有一些优势:
- 项目可移植性: 将依赖配置信息与项目一起打包,使得项目更具可移植性,能够在不同环境中顺利构建。
- 版本控制: 依赖配置与项目的版本控制相结合,确保团队成员在不同时间构建项目时使用相同的依赖版本。
- 独立性: 项目的构建不依赖于全局配置,降低了对外部环境的依赖。
1.2 Maven 全局配置文件(settings.xml) 的仓库配置元素(repositories)
1.2.1 settings.xml 中的仓库配置
- Maven的全局配置文件
settings.xml
中也可以配置仓库信息。这些配置通常位于<settings>
元素下的<mirrors>
、<profiles>
或<profiles>
的子元素中。
<settings>
<!-- 其他配置 -->
<mirrors>
<mirror>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 其他镜像配置 -->
</mirrors>
<!-- 其他配置 -->
</settings>
这个例子中的
<mirrors>
元素定义了一个名为 “central” 的镜像,指向Maven中央存储库。镜像的作用是加速依赖项的下载,特别是在网络状况不佳的情况下。
1.2.2 仓库配置的全局性
- 全局配置文件的仓库配置具有全局性,影响整个Maven环境。
如果项目的
pom.xml
中没有明确的 repositories 元素,或其中的存储库无法满足依赖项的需求,Maven将会按照全局配置文件(settings.xml
)中的仓库配置进行搜索。
1.2.3 【仓库(repository)】加载依赖【依赖(dependency)】顺序
在实际的依赖项解析过程中,Maven按照以下顺序查找依赖项:
- 本地仓库:
Maven会先查找本地仓库,即本地机器上存储已下载依赖项的目录。
<localRepository>D:/maven_repository</localRepository>
- pom.xml 中的 repositories 元素:
本地仓库查不到,Maven会接着查找项目的 pom.xml 文件中的 repositories 元素。这是最接近项目的配置,通常建议在项目中明确定义所需的远程存储库。
- 全局 Maven 配置文件 settings.xml 中的仓库配置:
如果在项目的 pom.xml 文件中找不到所需的依赖项,Maven会继续查找全局Maven配置文件 settings.xml 中的仓库配置。这是一个全局性的备选方案。
- 内置默认仓库:
如果以上两者都没有提供所需的依赖项,Maven将会使用其内置的默认仓库,例如 Maven Central Repository。这是Maven的最后一道防线。
在这个过程中,一旦找到符合条件的依赖项,Maven就会停止搜索,避免不必要的网络请求。
1.2.4 小结
pom.xml
文件中的repositories
元素和Maven全局配置文件(settings.xml
)中的仓库配置共同构成了Maven项目依赖项解析的机制。
了解它们之间的调用顺序有助于更好地理解Maven的行为,并在实际项目中更有效地管理依赖项。
在项目中,建议将依赖项的配置尽可能放在 pom.xml 文件中,以确保项目的构建过程是自包含的,可移植性和可维护性更高。
同时,全局配置文件中的仓库配置作为备选方案,在某些情况下也可以发挥重要作用,特别是在需要全局统一配置的场景下。
1.X 样例
- pom.xml
<project>
...
<repositories>
<repositories>
<repository>
<id>local-repo</id>
<url>file:///G:/suzy/GDrepo/repo</url>
</repository>
</repositories>
<repository>
<!-- 阿里云 | 源地址 : https://repo1.maven.org/maven2/ -->
<id>central</id>
<name>aliyun nexus central repo</name>
<url>https://maven.aliyun.com/repository/central</url>
<!-- <url>https://maven.aliyun.com/nexus/content/repositories/central</url> --> <!-- 阿里云老版仓库 -->
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<!-- 阿里云 | 源地址 : central仓 和 jcenter仓的聚合仓 -->
<id>public</id>
<name>aliyun nexus public repo</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- <url>https://maven.aliyun.com/nexus/content/groups/public</url> --> <!-- 阿里云老版仓库 -->
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<!-- spring 里程碑版本仓库 -->
<id>repository.spring.milestong</id>
<name>Spring Milestong Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>apache.snapshots</id>
<name>Apache Development Snapshot Repository</name>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
...
</project>
2 pluginRepositories 标签
2.X 样例
pom.xml
<project>
...
<pluginRepositories>
<pluginRepository>
<id>aliyun-nexus-public</id>
<name>aliyun nexus public</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<!-- 阿里云 | 源地址 : https://plugins.gradle.org/m2/ -->
<id>aliyun-gradle-plugin</id>
<name>aliyun gradle-plugin</name>
<url>https://maven.aliyun.com/repository/gradle-plugin</url>
<!-- <url>https://maven.aliyun.com/nexus/content/repositories/gradle-plugin</url> -->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<!-- 阿里云 | 源地址 : https://repository.apache.org/snapshots/ -->
<id>aliyun-apache-snapshots</id>
<name>apache snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
<!-- <url>https://maven.aliyun.com/nexus/content/repositories/apache-snapshots</url> -->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
X 参考文献
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!