当前位置: 首页 > 知识库问答 >
问题:

Maven伪影无法解决;试图从错误的存储库中解析工件

孔俊友
2023-03-14

在我的pom.xml中升级依赖项后,我在尝试下载新工件时收到了以下错误(在本例中使用maven命令行mvn spall-start: run)。

无法解析以下工件:io。github。bonigarcia:webdrivermanager:jar:3.8.1,org。zaproxy:zap clientapi:jar:1.7.0:找不到工件io。github。bonigarcia:webdrivermanager:jar:3.8.1Spring里程碑(https://repo.spring.io/milestone)

错误消息是正确的,该工件不存在于https://repo.spring.io/milestone.它确实存在于Maven central(https://repo.maven.apache.org/maven2)那么为什么Maven会在错误的存储库中寻找工件呢?

我知道这与我的Maven设置(settings.xml)有关,我在这里定义了一个到内部Nexus存储库的镜像。当我移除镜像时,Maven成功地在Maven central中查找并找到了工件。我不明白的是,当Nexus中不存在工件时,事情是如何工作的,以及为什么这个镜像设置会改变工件第一次被发现的方式。

来自设置。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>

同样值得注意的是,这是一个Spring Boot项目。我没有在我的pom.xml中定义任何存储库,但是由于我指定了一个Spring Boot父pom,我继承了以下存储库:

来自Spring Boot父级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>

共有2个答案

邵轶
2023-03-14

当您告诉Maven使用镜像时,该镜像将被用来代替原始存储库。

这意味着,当你镜像“中心”时,你将无法访问Maven central中不在该镜像中的任何内容。

扶高歌
2023-03-14

通常在存储库下定义回购协议,每个回购协议都有一个标识符。然后将此标识符用于镜像。在您的配置中,您可以镜像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>

作为回购协议https://repo.spring.io/有另一个标识符,它没有使用中心进行镜像。例如,你必须为彼此的回购协议定义镜像

<mirrors>
    <mirror>
        <id>Nexus</id>
        <name>Nexus Public Mirror</name>
        <url>https://myinternalnexushost.net/nexus/content/repositories/central</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>Spring</id>
        <name>Nexus Public Mirror</name>
        <url>https://myinternalnexushost.net/nexus/content/repositories/spring-milestone</url>
        <mirrorOf>spring-milestone</mirrorOf>
    </mirror>
</mirrors>

另见指南:

通过存储库,您可以指定要从哪个位置下载某些工件,如依赖项和maven-plugins。存储库可以在项目中声明,这意味着如果您有自己的自定义存储库,共享您项目的人可以轻松地从盒子里获得正确的设置。然而,您可能希望在不更改项目文件的情况下为特定存储库使用替代镜像。

我通常会做下面的事情,这会让事情更容易维护

  • 为Nexus中的每个所需回购创建“远程”回购
  • 在Nexus中创建包含所有远程回购的“组”回购

然后你只需要在设置中指定这一点。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>
 类似资料:
  • 我有两个私人JFrog存储库设置。一个存储库处理发布,另一个处理快照。下面是我如何在我的设置中定义它的。xml文件。 我的多模块maven项目中的多个内部依赖项都收到了这个错误: 从外观上看,Maven似乎并没有试图联系官方的Maven Central repo以获取这些依赖项,而是在我的私有存储库上失败了。我的印象是,如果私有存储库不包含特定工件,它将尝试联系Maven Central。 从Ma

  • 我已经将一个现有的manven项目导入到我从github下载的eclipse新工作区中。在maven安装中,我获得了构建成功,但该项目的红十字会从未成功过。这个问题以前已经提出过:link1,link2 大多数解决方案都是关于更新项目的,任何时候我做更新项目,都不能解决问题。 另一个解决方案是关于lombok插件,因为我注意到许多getter和setter方法都会导致问题(不存在)。lombok插

  • 现在我正在尝试从git运行克隆应用程序https://github.com/frinder/frinder-app但问题是该应用程序制作了很长时间,所以应该改变bulid.gradle 但是当我尝试相同的同步实现“com.android.支持:动画矢量可绘制:28.0.0”,但如果我删除它,请继续向我显示错误28.0.0它显示如下 但我不知道是什么造成了不完全相同的版本 这是应用程序build.g

  • 当使用Jenkins Freestyle项目时,我能够使用“Maven3-Artifactory集成”成功地运行Maven构建 当试图在pipeline中使用这个特性时,我遇到了从中央maven存储库中解析工件的问题。我的印象是,当Jenkins在artifactory中找不到工件时,它应该回到中央maven存储库https://repo . maven . Apache . org/maven

  • 我有一个本地的artifactory存储库。我在应用程序的pom.xml中有一个依赖项,如下所示: 我在我的“ext-local-snapshot”存储库中部署了一个activequant-p2-1.3-snapshot.jar。Artifactory将其部署在org/activequant/activequant-p2/activequant-p2-1.3-20130925.170928.jar

  • 问题内容: 我正在从事android问答游戏。QuestionActivity和EndgameActivity是我游戏中的2个类。我想将游戏的控制权转移到EndgameActivity。为此,我在QuestionActivty类中添加 在方法上。但是在回答了最后一个问题后,当我的游戏控制权没有转移到EndgameActivity时,日志猫显示了以下错误。 QuestionActivity课程- E