Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven伪影无法解决;试图从错误的存储库中解析工件_Java_Spring_Maven_Configuration_Nexus - Fatal编程技术网

Java 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

升级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里程碑中 ()

错误消息是正确的,该工件不存在于中。它确实存在于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>