Подтвердить что ты не робот

Как получить Maven для использования правильных репозиториев?

Я только что проверил некоторые проекты и им нужно их построить, однако я установил Maven довольно давно (возможно, 6 месяцев?) и на самом деле не использовал его с тех пор - pom.xml для проекта, который у меня есть, это " http://repo1.maven.org/myurlhere" в любом месте - у него есть абсолютный URL-адрес, где maven repo для проекта, но maven все еще пытается скачать с основного репозитория maven:

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

Может кто-нибудь помочь мне с тем, что я не делаю правильно, в основном я просто проверил проекты из командной строки, cd-ed в каталог и запустил "mvn clean install" - ничего больше. Любая помощь приветствуется.

4b9b3361

Ответ 1

pom.xml для проекта, который у меня есть, не имеет этого http://repo1.maven.org/myurlhere" где-нибудь в нем

Все проекты http://repo1.maven.org/ объявлены как <repository><pluginRepository>) по умолчанию. Этот репозиторий, который называется центральным репозиторием, наследуется, как и другие настройки по умолчанию из "Super POM" (все проекты наследуются от Super POM). Таким образом, POM представляет собой комбинацию Super POM, любых родительских POM и текущего POM. Эта комбинация называется "эффективной POM" и может быть напечатана с использованием цели effective-pom плагина Maven Help (полезно для отладки).

И действительно, если вы запустите:

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 repo для проекта, но maven все еще пытается загрузить из общего maven repo

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 пытается создать проект, он будет выглядеть в вашем локальном репозитории (по умолчанию ~/.m2/repository, но вы можете настроить его, изменив значение <localRepository> в ~/.m2/settings.xml), чтобы найти любую зависимость, плагин или отчет определенном в вашем pom.xml. Если соответствующий артефакт не найден в вашем локальном репозитории, он будет отображаться во всех внешних хранилищах, настроенных, начиная с по умолчанию, http://repo1.maven.org.

Вы можете настроить Maven, чтобы избежать этого репозитория по умолчанию, установив зеркало в ваш файл settings.xml:

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

Таким образом, вместо обращения к http://repo1.maven.org, Maven свяжется с вашим репозиторием Entreprise (http://the/server в этом примере).

Если вы хотите добавить другой репозиторий, вы можете определить новый в файле settings.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 модель здесь.

Что касается процесса clean, вы можете попросить Maven запустить его в автономном режиме. В этом случае Maven не будет пытаться достичь каких-либо внешних репозиториев:

mvn -o clean 

Ответ 3

В основном, все Maven говорит вам, что определенные зависимости в вашем проекте недоступны в центральном репозитории maven. По умолчанию используется локальная папка .m2 (локальный репозиторий), а затем любые настроенные репозитории в вашем POM, а затем центральный репозиторий maven. Посмотрите на репозитории раздел справки Maven.

Проблема в том, что проверенный проект не настраивал POM таким образом, чтобы можно было найти все зависимости, и проект мог быть построен с нуля.