在maven中pom.xml是Maven进行工作的主要配置文件,它的作用包括:配置Maven项目中需要使用的远程仓库,Maven项目的资源依赖关系等。其中pom是Project Object Model(项目对象模型)的简称。
在pom.xml中repositories标签的作用是用来配置maven项目的远程仓库。示例如下:
<repository>
<id>nexus</id><!--远程仓库唯一标识符 -->
<name>Private Repository</name><!--描述 -->
<url><!--远程仓库url --></url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
我们先看一下的配置,你可以在它下面添加多个 ,每个都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url。此外,true告诉Maven可以从这个仓库下载releases版本的构件,而false告诉Maven不要从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持
layout:用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。
mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
我们需要配置POM的来指定Maven分发构件的位置,如下:
<!-- 定义snapshots库和releases库的nexus地址 -->
<distributionManagement>
<repository>
<!-- 库的id -->
<id>nexus-releases</id>
<!-- 库的url -->
<url>https://172.17.103.59:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>https://172.17.103.59:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
如果是快照版本,执行mvn deploy时会自动发布到快照版本库中。而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本,那么在执行mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块。在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载。
需要注意的是,settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地的。代码如下:
<settings>
...
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
...
</settings>
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
<repositories>
<repository>
<id>crm-online</id>
<url>http://maven.xxx/nexus/content/repositories/crm-online</url>
</repository>
<repository>
<id>crm-snapshot</id>
<url>http://maven.xxx/nexus/content/repositories/crm-t</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>nan-nexus</id>
<name>Nexus</name>
<url>http://nexus.argan.xyz/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
</repositories>
id,库的ID
name,库的名称
url,库的URL
layout,在Maven 2/3中都是default,只有在Maven 1.x中才是legacy
releases,库中版本为releases的构件
snapshots,库中版本为snapshots的构件
enabled,是否支持更新
updatePolicy,构件更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily
checksumPolicy,校验码异常的策略,可选值有ignore, fail, warn
layout,在Maven 2/3中都是default,只有在Maven 1.x中才是legacy
2、如果需要认证才能访问,则需要在settings.xml文件中添加如下内容,并且server中的id字段的值要与repository中id字段的值相同;如果有一个仓库需要验证
<servers>
<server>
<id>nan-nexus</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
<distributionManagement>
<repository><!--部署项目产生的构件到远程仓库需要的信息 -->
<id>releases</id>
<name>Release Deploy</name>
<url>http://10.60.145.41:881/repository/maven-releases/</url>
</repository>
<snapshotRepository><!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 -->
<id>snapshot</id>
<name>Snapshot Deploy</name>
<url>http://10.60.145.41:881/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
2、与repositories中的repository不同的是,distributionManagement中分为repository和snapshotRepository,但里面的字段大致与repositories中的repository内的相同。同样,如果访问需要认证的话,也需要在settings.xml文件中设置:
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
三、pluginRepositories标签解析
1、pluginRepositories中的repository,pluginRepositories中的repository是以pluginRepository表示的,它表示插件从什么库地址下载。
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://127.1.19.1:8081/repository/ai-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
2、它里面的字段和用法与repositories中的repository基本一致。
到此关于仓库的标签分析完毕。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!