为存储库使用镜像
使用存储库,您可以指定要从哪些位置下载某些工件,例如依赖项和 maven-plugins。存储库可以在项目中声明,这意味着如果您有自己的自定义存储库,那么共享您的项目的人可以轻松获得开箱即用的正确设置。但是,您可能希望在不更改项目文件的情况下为特定存储库使用替代镜像。
使用镜子的一些原因是:
- 互联网上有一个同步镜像,地理位置更近更快
- 你想用你自己的内部存储库替换一个特定的存储库,你可以更好地控制它
- 您想要运行存储库管理器来为镜像提供本地缓存,并且需要使用其 URL
要配置给定存储库的镜像,请在设置文件 ( ${user.home}/.m2/settings.xml
) 中提供它,为新存储库提供自己的id
和url
,并指定作为mirrorOf
您正在使用其镜像的存储库的 ID 的设置。例如,默认包含的主 Maven 中央存储库的 ID 是central
,因此要使用不同的镜像实例,您需要配置以下内容:
<settings> ... <mirrors> <mirror> <id>other-mirror</id> <name>Other Mirror Repository</name> <url>https://other-mirror.repo.other-company.com/maven2</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> ... </settings>
请注意,给定存储库最多可以有一个镜像。换句话说,您不能将单个存储库映射到一组都定义相同<mirrorOf>
值的镜像。Maven 不会聚合镜像,只会选择第一个匹配项。如果您想提供多个存储库的组合视图,请改用存储库管理器。
设置描述符文档可以在Maven 本地设置模型网站上找到。
注意:官方 Maven 存储库https://repo.maven.apache.org/maven2
由 Sonatype 公司托管,并通过 CDN 在全球范围内分发。
存储库元数据中提供了已知镜像的列表。这些镜像可能有不同的内容,我们不以任何方式支持它们。
使用单个存储库
您可以强制 Maven 通过镜像所有存储库请求来使用单个存储库。存储库必须包含所有所需的工件,或者能够将请求代理到其他存储库。当使用带有Maven 存储库管理器的内部公司存储库来代理外部请求时,此设置最有用。
为此,请设置mirrorOf
为*
.
注意:此功能仅在 Maven 2.0.5+ 中可用。
<settings> ... <mirrors> <mirror> <id>internal-repository</id> <name>Maven Repository Manager running on repo.mycompany.com</name> <url>http://repo.mycompany.com/proxy</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ... </settings>
高级镜子规格
一个镜像可以处理多个存储库。这通常与存储库管理器一起使用,它可以轻松集中配置后面的存储库列表。
语法:
*
匹配所有 repo id。external:*
匹配所有存储库,除了那些使用本地主机或基于文件的存储库。当您要排除为集成测试定义的重定向存储库时使用此选项。- 从 Maven 3.8.0 开始,
external:http:*
匹配所有使用 HTTP 的存储库,除了使用 localhost 的存储库。 - 可以使用逗号作为分隔符指定多个存储库
- 感叹号可以与上述通配符之一结合使用以排除存储库 ID
注意不要在逗号分隔列表中的标识符或通配符周围包含额外的空格。例如,将<mirrorOf
> 设置为的镜像!repo1, *
不会镜像任何内容,而!repo1,*
将镜像所有内容,但repo1
.
通配符在以逗号分隔的存储库标识符列表中的位置并不重要,因为通配符会延迟进一步处理,并且显式包含或排除会停止处理,从而推翻任何通配符匹配。
当您使用高级语法并配置多个镜像时,声明顺序很重要。当 Maven 查找某个存储库的镜像时,它首先检查<mirrorOf>
与存储库标识符完全匹配的镜像。如果没有找到直接匹配,Maven 会根据上述规则(如果有)选择第一个匹配的镜像声明。因此,您可以通过更改定义的顺序来影响匹配顺序settings.xml
例子:
*
= 一切external:*
= 不在本地主机上且不基于文件的所有内容。repo,repo1
=回购或回购1*,!repo1
= 除 repo1 外的所有内容
<settings> ... <mirrors> <mirror> <id>internal-repository</id> <name>Maven Repository Manager running on repo.mycompany.com</name> <url>http://repo.mycompany.com/proxy</url> <mirrorOf>external:*,!foo</mirrorOf> </mirror> <mirror> <id>foo-repository</id> <name>Foo</name> <url>http://repo.mycompany.com/foo</url> <mirrorOf>foo</mirrorOf> </mirror> </mirrors> ... </settings>
创建自己的镜子
中央存储库的大小正在稳步增加为了节省我们的带宽和您的时间,不允许镜像整个中央存储库。(这样做会自动禁止您。)相反,我们建议您将存储库管理器设置为代理。
如果您真的想成为官方镜像,请联系MVNCENTRAL的 Sonatype 并告知您的位置,我们将帮助您进行设置。