java - Maven Artifact 无法解析;尝试从错误的存储库解析 Artifact

标签 java spring maven configuration nexus

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

The following artifacts could not be resolved: io.github.bonigarcia:webdrivermanager:jar:3.8.1, org.zaproxy:zap-clientapi:jar:1.7.0: Could not find artifact io.github.bonigarcia:webdrivermanager:jar:3.8.1 in spring-milestone (https://repo.spring.io/milestone)

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

我确实知道这与我的 Maven 设置 (settings.xml) 相关,我在其中定义了内部 Nexus 存储库的镜像。当我删除镜像时,Maven 成功地在 Maven 中心查找并找到该 Artifact 。我不明白的是当 Nexus 中不存在 Artifact 时事物如何工作的机制,以及为什么此镜像设置会改变 Artifact 首次发现的方式。

来自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>

还值得注意的是,这是一个 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>

最佳答案

You usually define the repos under repositories每个都有一个标识符。然后将该标识符用于镜子。在您的配置中,您使用 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/ 有另一个标识符,因此它不会使用 central 进行镜像。因此,您还必须为每个其他存储库定义镜像,例如

<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>

另请参阅guidelines :

With Repositories you specify from which locations you want to download certain artifacts, such as dependencies and maven-plugins. Repositories can be declared inside a project, which means that if you have your own custom repositories, those sharing your project easily get the right settings out of the box. However, you may want to use an alternative mirror for a particular repository without changing the project files.

我通常会执行以下操作,这会使维护变得更容易

  • 为 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>

关于java - Maven Artifact 无法解析;尝试从错误的存储库解析 Artifact ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59845697/

相关文章:

java - 如何使用 GroupLayout 来缩进?

javascript - 在javascript中访问动态请求变量

java - IntelliJ IDEA : Integrated Maven builds often delayed

android - 在 build.gradle 中找不到参数的方法 uploadArchives()

Java 功能测试

java - Delphi转java、soap delphi、短信发送

java - 如何避免Google App Engine不支持Runtime.addShutdownHook

java - Spring 4、JBoss 7、@Configuration Bean 等效 XML - Spring Transactions

java - 映射到具有复合键的类时,Spring Data MongoDB 中的分组返回 NULL _id

java - 跨多个项目的 Maven 和重构