Как получить 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" - ничего больше. Любая помощь приветствуется.
Ответы
Ответ 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 таким образом, чтобы можно было найти все зависимости, и проект мог быть построен с нуля.