2010-03-02 3 views
44

Я только что проверил некоторые проекты и им нужно их построить, однако я установил Maven довольно давно (возможно, 6 месяцев) и действительно не использовал его с тех пор - pom.xml для проекта, который у меня нет, это «http://repo1.maven.org/myurlhere» где-нибудь в нем - он имеет абсолютный URL, где Maven репо для проекта, но специалист все еще пытается загрузить из общего 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/) 

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

ответ

4

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

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

23

По умолчанию 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 свяжется репозиторий антрепризы (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 модели here.

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

mvn -o clean 
+1

Maven не разрешает зависимости во время очистки, не требует автономной работы (по крайней мере, не с maven 2.2.1 и чистым плагином 2.2). –

+4

НИКОГДА не используйте выражение «*» подстановочного символа при определении зеркал, иначе вы не сможете создавать сторонние инструменты поставщика или образцы проектов, которые определяют пользовательские хранилища в своих помах. – HDave

+0

Что эквивалентно определению и переопределению этого в моем файле проекта pom.xml? – powder366

53

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

Maven попытается найти depe во всех объявленных репозиториях, в том числе в центральном, который есть по умолчанию, как мы видели. Но, по трассе вы показываете, вы только один репозиторий определен (центральный репозиторий) или 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) 

Так, в основном, специалист не может найти url.project:project:pom:x.x, потому что он недоступен в центре.

Но не зная, какой проект вы проверили (у него могут быть конкретные инструкции) или какая зависимость отсутствует (возможно, она может быть найдена в другом репозитории), это невозможно, чтобы помочь вам дальше.

+0

, чтобы увидеть, где именно он проверяет, когда он запускается, запустите 'mvn -U dependency: resolve' -' -U' заставляет mvn повторять попытку, иначе он кэширует сбой в виде метаданных – Adam

Смежные вопросы