我使用本指南创建了一个项目存储库:https://devcenter.heroku.com/articles/local-maven-dependencies
如果我在.m2文件夹中的mirrors
文件中注释掉settings.xml
定义,这样可以正常工作。
如果定义了镜像,则不考虑项目存储库。我是否还必须将其添加为镜像?如果可以在pom.xml
。
的pom.xml
<repositories>
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
</repositories>
将Settings.xml
<mirrors>
<mirror>
<id>de.companyname.repository.release</id>
<mirrorOf>de.companyname.repository</mirrorOf>
<url>https://repository.companyname.de/content/repositories/releases</url>
</mirror>
<mirror>
<id>de.companyname.repository</id>
<mirrorOf>de.companyname.repository</mirrorOf>
<url>https://repository.companyname.de/content/repositories/snapshots</url>
</mirror>
<mirror>
<id>nexus-else</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-snapshots</id>
<mirrorOf>central-snapshots</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public-snapshots</url>
</mirror>
</mirrors>
答案 0 :(得分:3)
这是正常的,实际上是mirrors的通用用例。它们用于让Maven从<repository>
元素中定义的另一个位置下载依赖项。有关如何执行此操作的更多信息in this related answer。
在您的情况下,您有这种镜像配置:
<mirror>
<id>nexus-else</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public</url>
</mirror>
表示此<mirror>
将镜像*
,即所有存储库。因此,您的POM中的repo
声明不会被考虑在内,因为此镜像已配置为镜像它。因此,Maven在file://${project.basedir}/repo
处发出的每个请求实际上都会重定向到您的镜像URL。你有两个解决方案:
不要告诉nexus-else
镜像基于本地文件的存储库。你可以用
<mirror>
<id>nexus-else</id>
<mirrorOf>external:*</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public</url>
</mirror>
external:*
匹配除使用localhost或基于文件的存储库的存储库之外的所有存储库。当您要排除为集成测试定义的重定向存储库时,它与存储库管理器一起使用。
由于您的repo
声明是一个与您的localhost相关的文件存储库,因此nexus-else
不会对其进行镜像。这还可以确保您将来添加的localhost上的任何其他基于文件的存储库也不会被镜像。
使用以下命令从镜像配置中排除repo
:
<mirror>
<id>nexus-else</id>
<mirrorOf>*,!repo</mirrorOf>
<url>http://nexus.companyname.de:8081/nexus/content/groups/public</url>
</mirror>
*,!repo1
=除repo1以外的所有内容
此解决方案可能比上面的解决方案更脆弱,因为您需要对存储库的ID进行硬编码。