(转)Maven中的库(repository)详解 ---repository配置查找构件(如.jar)的远程库
转:https://blog.csdn.net/taiyangdao/article/details/52287856
Maven中的库(repository)是构件(artifact)的集合。构件以一定的布局存储在库中。
Maven中的库(repository)可以分为本地库和远程库。本地库在安装Maven的计算机上的指定路径下(通常是用户主目录下的.m2/repository),本地库中的构件往往是远程库中下载到本地的部分构件,被本地项目所引用。当然,本地项目发布时,默认也发布到本地库中。远程库往往是由第三方提供的,用于发布构件供项目下载使用,如著名的Maven central库。
根据构件的用途,构件可以分为两类,一类是被其他构件依赖的构件(dependencies),这也是Maven库中主要的构件。另一类是插件(plugins),这是一种特殊的构件。对于依赖的构件,其所在的库通过<repositories>设置。但是对于插件的构件,由于插件的特殊性,所以插件库独立于依赖库,使用<pluginRepositories>单独设置。但是由于依赖和插件都属于构件,所以<repositories>和<pluginRepositories>中的设置基本一致。
如果在远程库中找到则下载到本地库,如果在所有的远程库中都没有则会抛出编译异常。
Maven中要配置库,可以有多种方式。最直接的是在项目中的pom.xml文件中,通过<repositories>配置库,这样配置的库仅适用于当前项目。也可以通过<profiles>中的<repositories>配置在特定环境下的特殊库,这可以在项目的pom.xml文件中实现,也可以在Maven的settings.xml中实现。
此外,一个项目发布后,其往往要被部署到一个库中,作为库的构件以供其他项目引用。通过<distributionManagement>中的<repositories>配置要发布的库。
1. 在pom.xml或settings.xml中设置<repositories>,往往需要提供一个<repository>的如下信息:
- id,库的ID
- name,库的名称
- url,库的URL
- layout,在Maven 2/3中都是default,只有在Maven 1.x中才是legacy
- releases,库中版本为releases的构件
- snapshots,库中版本为snapshots的构件
根据构件的版本,可以将构件分为releases类型的构件和snapshots类型的构件。
对于一个构件,其版本的变化是否会引起库中更新该构件呢?则需要根据库的<releases>或<snapshots>设置。<releases>和<snapshots>的设置参数一致,如下所示:
- enabled,是否支持更新
- updatePolicy,构件更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily
- checksumPolicy,校验码异常的策略,可选值有ignore, fail, warn
在pom.xml中定义<repository>的示例如下:
- <repositories>
- <repository>
- <releases>
- <enabled>false</enabled>
- <updatePolicy>always</updatePolicy>
- <checksumPolicy>warn</checksumPolicy>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- <updatePolicy>never</updatePolicy>
- <checksumPolicy>fail</checksumPolicy>
- </snapshots>
- <id>codehausSnapshots</id>
- <name>Codehaus Snapshots</name>
- <url>https://repository-master.mulesoft.org/nexus/content/groups/public/</span></url>
- <layout>default</layout>
- </repository>
- </repositories>
2.在pom.xml中的<distributionManagement>,负责管理构件的发布包和其他编译生成的支撑文件。
在<distributionManagement>中也可以配置一个<repository>。这里的<repository>给出的是当前项目部署后所发布的库,示例如下:
- <distributionManagement>
- <repository>
- <uniqueVersion>false</uniqueVersion>
- <id>corp1</id>
- <name>Corporate Repository</name>
- <url>scp://repo/maven2</url>
- <layout>default</layout>
- </repository>
- <snapshotRepository>
- <uniqueVersion>true</uniqueVersion>
- <id>propSnap</id>
- <name>Propellors Snapshots</name>
- <url>sftp://propellers.net/maven</url>
- <layout>legacy</layout>
- </snapshotRepository>
- ...
- </distributionManagement>
<distributionManagement>中还可以配置一个<snapshotRepository>,表示开发过程中的发布库。<snapshotRepository>的设置与<repository>一样。如果没有设置<snapshotRepository>,还可以将<repository>用作<snapshotRepository>。
关于<distributionManagement>的具体用法参见后续文章。
3.在pom.xml或settings.xml中的<profile>中都可以设置<repositories>或<pluginRepositories>,其中的<repository>设置与在<profile>外设置<repositories>中的<repository>一样。
<profile>中的<repositories>表示在该<profile>环境中所特有的库。