2013-07-11 4 views
0

Я пытаюсь интегрировать nexus в проект maven и имею проблему, надеясь, что кто-то здесь может помочь.Можно загрузить файл jar, используя maven + local repo, но не используя maven + nexus?

Изначально у меня был файл Maven settings.xml использовать локальное хранилище только:

<settings> 
    <localRepository>C:\\r</localRepository> 
    ... 
</settings> 

Это прекрасно работает и все зависимости для моего проекта загружаются в локальное хранилище. Я проверил это, удалив каталог для maven-settings-2.2.1 артефакта и снова работает mvn -U dependency:list:

 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom (3 KB at 11.3 KB/sec) 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar (48 KB at 509.5 KB/sec) 

виден выше, что файл pom.xml и .jar для maven-settings-2.2.1 артефакта был загружен.

Далее я попытался настройки моего Maven проекта, чтобы указать на хранилище связующего, что я настроил:

<settings> 
    <localRepository>C:\\r</localRepository> 
    <mirrors> 
    <mirror> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://<server>:<port>/nexus/content/groups/public</url> 
</mirror> 
    </mirrors> 
    ... 
</settings> 

Я удалил maven-settings-2.2.1 артефактов из моего локального хранилища, и снова побежал mvn -U dependency:list:

 
Downloading: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloaded: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom (3 KB at 17.0 KB/sec) 
Downloading: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar 

[ERROR] Failed to execute goal on project : Could not resolve dependencies for project : The following artifacts could not be resolved: org.apache.maven:maven-settings:jar:2.2.1: Could not find artifact org.apache.maven:maven-settings:jar:2.2.1 in nexus (http://:/nexus/content/groups/public) -> [Help 1] 

На этот раз nexus может загрузить файл pom.xml артефакт maven-settings-2.2.1, но не может загрузить файл .jar. Я проверил на сервере nexus, и когда я просматриваю удаленное содержимое «центрального» репозитория, я вижу артефакты maven-settings-2.2.1 (оба файла pom.xml и .jar), но в локальном хранилище неактивных я вижу только файл pom.xml.

Так что я посмотрел на документацию связующей (см http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html) и настроить мои настройки Maven с профилем связующей как предложено:

<settings> 
    ... as before ... 
    <profiles> 
    <profile> 
     <id>nexus</id> 
     <repositories> 
     <repository> 
      <id>central</id> 
      <url>http://central</url> 
      <releases><enabled>true</enabled></releases> 
      <snapshots><enabled>true</enabled></snapshots> 
     </repository> 
     </repositories> 
     <pluginRepositories> 
     <pluginRepository> 
      <id>central</id> 
      <url>http://central</url> 
      <releases><enabled>true</enabled></releases> 
      <snapshots><enabled>true</enabled></snapshots> 
     </pluginRepository> 
     </pluginRepositories> 
    </profile> 
    </profiles> 
</settings> 

Опять я удалил любую локальную копию maven-settings-2.2.1 артефакта, и побежал mvn -U dependency:list:

 
Downloading: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloaded: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloading: http://:/nexus/content/groups/public/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar 

[ERROR] Failed to execute goal on project : Could not resolve dependencies for project : The following artifacts could not be resolved: org.apache.maven:maven-settings:jar:2.2.1: Could not find artifact org.apache.maven:maven-settings:jar:2.2.1 in nexus (http://:/nexus/content/groups/public) -> [Help 1] 

Как и раньше, pom.xml был загружен из связующих, но не файл .jar. Как и раньше, когда я проверяю локальное хранилище на сервере nexus, присутствует файл pom.xml, но не файл .jar.

Как испытание здравомыслия, я удалил конфигурацию нексуса из моих мавенный settings.xml, удален maven-settings-2.2.1 артефактов из моего локального хранилища, и попытался снова:

 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar 

На этот раз, как `.jar файл pom.xml и были загружены напрямую.

Так что я не уверен, что мне нужно сделать, чтобы обойти эту проблему: при использовании локального хранилища и получить Maven для загрузки зависимостей непосредственно, я могу загрузить оба pom.xml и .jar файлов для maven-settings-2.2.1 артефакта. Когда я добавляю свой сервер nexus в микс, только pom.xml загружается nexus.

Это проблема конфигурации сервера Nexus или проблема конфигурации maven?

ответ

1

Сначала вы неправильно поняли значение локального хранилища.

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

Одна вещь, которую вы, возможно, неправильно поняли: даже вы удалили настройку связи, Maven по-прежнему будет загружаться из удаленного репозитория по умолчанию, который является так называемым Maven Central (http://repo.maven.apache.org/maven2).

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

<url>http://<server>:<port>/nexus/content/groups/public</url> 

к сообщению об ошибке в Maven:

[ERROR] ... Could not find artifact ... in nexus (http://:/nexus/content/groups/public) -> [Help 1] 

имя хоста и порт связующей просто не правильно настроен.

Fix, что и все должно работать

Если такая проблема в том, что вы маскировали данные, то проблема будет связана с вашей установкой связующего. Перейдите на консольный сайт Nexus и убедитесь, что вы правильно настроили прокси, просмотрев удаленные файлы прокси-серверов, которые вы настроили. Проверьте, есть ли у вас Maven центральный как один из прокси в «публичной» прокси-группе тоже

+0

Спасибо за ответ. Я удаляю артефакты из своего локального репо, чтобы затем maven был вынужден получить эти артефакты в другом месте, либо непосредственно из Maven Central, либо опосредованно через мой сервер nexus, в зависимости от конфигурации. Значит, я правильно понял эту концепцию? –

+0

«http: //:/nexus/...» в приведенной выше цитате была ошибкой cut-n-paste, она должна быть «http: //, server>: /nexus/...». Он работает, потому что другие артефакты загружаются, а не файл maven-settings-2.2.1 jar. –

+0

это сработало, потому что вы уже создали и загрузили его в локальное репо уже и потому, что Maven может найти их в локальном репо, он не будет загружать его. Просто, чтобы быть уверенным ... вы действительно видите ': ' или вы просто маскируете его? Я ожидаю, что вы скажете мне, что на самом деле это настоящее имя хоста и номер порта. И пытались ли вы убедиться, что ваш репозиторий nexus действительно работает? Я упомянул способ проверки –

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