Java Maven伪影无法解决;试图从错误的存储库中解析工件
升级pom.xml中的依赖项后,我在尝试下载新工件时收到了以下错误(在本例中使用maven命令行Java Maven伪影无法解决;试图从错误的存储库中解析工件,java,spring,maven,configuration,nexus,Java,Spring,Maven,Configuration,Nexus,升级pom.xml中的依赖项后,我在尝试下载新工件时收到了以下错误(在本例中使用maven命令行mvn-spring-boot:run) 无法解析以下工件: io.github.bonigarcia:webdrivermanager:jar:3.8.1, org.zaproxy:zap clientapi:jar:1.7.0:找不到工件 bonigarcia:webdrivermanager:jar:3.8.1在spring里程碑中 () 错误消息是正确的,该工件不存在于中。它确实存在于Mave
mvn-spring-boot:run
)
无法解析以下工件:
io.github.bonigarcia:webdrivermanager:jar:3.8.1,
org.zaproxy:zap clientapi:jar:1.7.0:找不到工件
bonigarcia:webdrivermanager:jar:3.8.1在spring里程碑中
()
错误消息是正确的,该工件不存在于中。它确实存在于Maven central()中,那么为什么Maven会在错误的存储库中查找工件呢
我知道这与我的Maven设置(settings.xml)有关,在这里我定义了一个到内部Nexus存储库的镜像。当我移除镜像时,Maven成功地在Maven central中查找并找到了工件。我不明白的是,当Nexus中不存在工件时,事情是如何工作的,以及为什么这个镜像设置会改变工件第一次被发现的方式
从settings.xml
<mirrors>
<mirror>
<id>Nexus</id>
<name>Nexus Public Mirror</name>
<url>https://myinternalnexushost.net/nexus/content/repositories/central</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
关系
Nexus公共镜像
https://myinternalnexushost.net/nexus/content/repositories/central
中心的
同样值得注意的是,这是一个Spring Boot项目。我没有在pom.xml中定义任何存储库,但由于我指定了spring boot父pom,因此我继承了以下存储库:
从Spring启动父pom
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>spring-milestone</id>
<name>Spring Milestone</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>spring-snapshot</id>
<name>Spring Snapshot</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>rabbit-milestone</id>
<name>Rabbit Milestone</name>
<url>https://dl.bintray.com/rabbitmq/maven-milestones</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
假的
春季里程碑
春季里程碑
https://repo.spring.io/milestone
真的
春季快照
春季快照
https://repo.spring.io/snapshot
假的
兔子里程碑
兔子里程碑
https://dl.bintray.com/rabbitmq/maven-milestones
假的
中心的
中央知识库
https://repo.maven.apache.org/maven2
当您告诉Maven使用镜像时,将使用该镜像而不是原始存储库
这意味着当镜像“central”时,您将无法访问Maven central中不在该镜像中的任何内容。并且每个镜像都有一个标识符。然后将此标识符用于镜像。在您的配置中,镜像id为central
<mirrors>
<mirror>
<id>Nexus</id>
<name>Nexus Public Mirror</name>
<url>https://myinternalnexushost.net/nexus/content/repositories/central</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
另见:
使用存储库,您可以指定要从哪些位置下载某些工件,例如依赖项和maven插件。存储库可以在项目中声明,这意味着如果您有自己的自定义存储库,那么共享您的项目的人可以轻松获得正确的设置。但是,您可能希望在不更改项目文件的情况下为特定存储库使用替代镜像
我通常会做下面的事情,这使得事情更容易维护
- 为Nexus中的每个所需回购创建“远程”回购
- 在Nexus中创建包含所有远程回购的“组”回购
settings.xml
<mirrors>
<mirror>
<id>Nexus</id>
<name>Nexus Public Mirror</name>
<url>https://myinternalnexushost.net/nexus/content/repositories/maven-group</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
关系
Nexus公共镜像
https://myinternalnexushost.net/nexus/content/repositories/maven-group
*
<mirrors>
<mirror>
<id>Nexus</id>
<name>Nexus Public Mirror</name>
<url>https://myinternalnexushost.net/nexus/content/repositories/maven-group</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>