如何让 Maven 使用正确的存储库?

2022-08-31 13:11:04

我刚刚检查了一些项目并需要构建它们,但是我在很久以前(也许是6个月?)安装了Maven,并且从那以后真的没有使用它 - 对于我拥有的项目,它的任何地方都没有这个“http://repo1.maven.org/myurlhere” - 它具有Maven存储库的绝对位置,但Maven仍在尝试从一般的Maven存储库下载:pom.xmlurl

Macintosh:trunk$ mvn clean install
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/url/project/project/x.x/project-x.x.pom
[INFO] Unable to find resource 'url.project:project:pom:x.x' in repository central (http://repo1.maven.org/)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

GroupId: url.project
ArtifactId: project
Version: x.x

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/)

任何人都可以帮助我做不好的事情吗?
基本上,我只是从命令行签出项目,-ed到目录中并运行-没有别的。
任何帮助都非常感谢。cdmvn clean install


答案 1

pom.xml对于我拥有的项目来说,在任何地方都没有这个“http://repo1.maven.org/myurlhere

默认情况下,所有项目 http://repo1.maven.org/ 声明为 (and )。此存储库称为中央存储库,与其他默认设置一样,从“超级POM”继承(所有项目都继承自超级POM)。因此,POM实际上是超级POM,任何父POM和当前POM的组合。这种组合被称为“有效POM”,可以使用Maven Help插件的目标打印(对调试有用)。<repository><pluginRepository>effective-pom

事实上,如果你跑:

mvn help:effective-pom

您至少会看到以下内容:

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>

它具有绝对的url,其中maven存储库是用于项目的,但maven仍在尝试从一般maven存储库下载

Maven 将尝试在所有声明的存储库中查找依赖项,包括我们看到的默认情况下存在的中央存储库。但是,根据您显示的跟踪,您只定义了一个存储库(中央存储库),否则maven将打印如下内容:

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/),
  another-repository (http://another/repository)

因此,基本上,maven无法找到,因为它在中央不可用。url.project:project:pom:x.x

但是,在不知道您签出哪个项目(它可能有特定的说明)或缺少哪个依赖项(可以在另一个存储库中找到)的情况下,就不可能为您提供进一步的帮助。


答案 2

默认情况下,Maven 将始终在官方 Maven 存储库中查找,该存储库 http://repo1.maven.org

当 Maven 尝试构建项目时,它将在本地存储库中查找(默认情况下,但您可以通过更改 中的值来配置它),以查找在 .如果在本地存储库中找不到足够的工件,它将在配置的所有外部存储库中查找,从默认存储库开始,http://repo1.maven.org~/.m2/repository<localRepository>~/.m2/settings.xmlpom.xml

您可以通过在文件中设置镜像来配置 Maven 以避免此默认存储库:settings.xml

<mirrors>
    <mirror>
        <id>repoMirror</id>
        <name>Our mirror for Maven repository</name>
        <url>http://the/server/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

这样,Maven 将联系您的企业存储库(在本例中),而不是联系 。http://repo1.maven.orghttp://the/server

如果要添加其他存储库,可以在设置中定义一个新存储库.xml文件:

<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>foo.bar</id>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <url>http://new/repository/server</url>
            </repository>
        </repositories>

您可以在此处查看完整的模型。settings.xml

关于该过程,您可以要求Maven脱机运行它。在这种情况下,Maven 不会尝试访问任何外部存储库:clean

mvn -o clean 

推荐