2010-11-04 3 views
20

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

Для стабильных построений никогда не было проблемы с загрузкой чего-либо из репозитория.

Однако, когда я добавляю -SNAPSHOT, Maven утверждает, что не может найти зависимость, хотя она определенно находится в репозитории.

Если я создаю и развертываю зависимость локально (т. Е. В своем локальном репо), все работает нормально.

В основном, это работает:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.0</version> 
</dependency> 

и это не делает:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
</dependency> 

Даже если обе версии были построены так же, как и развернуто (насколько я могу возможно сказать) правильно в хранилище.

Ошибка:

Missing: 
---------- 

1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
     1) com.example:product:war:2.0.0-SNAPSHOT 
     2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

Хотя это звучит похоже на this вопрос, решение прибыл в там не относится к моему делу.

Любое понимание этой проблемы было бы весьма полезным.

Редактировать

Запуск с -X (как это было предложено Джон В.) показал следующее:

[DEBUG] Skipping disabled repository central 
[DEBUG] ourlibrary: using locally installed snapshot 
[DEBUG] Skipping disabled repository central 
[DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com) 
[DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository 

    com.example:ourlibrary:pom:1.0.1-SNAPSHOT 

from the specified remote repositories: 
    repo.example.com (http://repo.example.com/repo) 


[DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile 
[DEBUG] com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile) 

ответ

12

Две мысли приходят на ум:

  1. Путь структура ваш внутренний репозиторий для вашего артефакта - . Я предлагаю запустить команду maven с параметром -X. Он покажет попытку maven в загрузке файлов. Получите строку , у которой есть ваш репозиторий как url ​​ и попробуйте сами найти его.

    Путь должен выглядеть

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. Вы не включил репозиторий в хранилище в вашем П. xml
+2

Я не декларировал репо в POM, а заданный в настройках Maven, что наш репо является универсальным (*) зеркало.Разве этого не должно быть достаточно (этого вполне достаточно для стабильных построений)? Добавление явного объявления в POM, похоже, решает проблему. – Kris

+0

Я, к сожалению, не слишком много работал с параметрами settings.xml для репозиториев. Я включил их в родительский pom, поэтому любой разработчик, начинающий свежие, не должен беспокоиться о файле settings.xml, если репозиторий должен измениться (что у него на самом деле есть для нас) –

+14

Думаю, я рассудил это. Для стабильных построений Maven по умолчанию будет «центральным», который мои настройки зеркала перенаправляют в наш репозиторий. Для сборки SNAPSHOT по умолчанию нет (поскольку центральная часть не обрабатывает их), а при отсутствии POM, указывающей репо (что * делает * обрабатывает сборки SNAPSHOT), он просто терпит неудачу, даже не пытаясь найти его. – Kris

11

Обычно у вас есть отдельный URL-адрес моментальных копий из URL-адреса выпусков. Просто разные пути в том же репозитории, но перечислены как отдельные репозитории в pom. Один для снимков должны быть снимки включены, и один для релизов моментальных снимки отключены:

<repositories> 
     <repository> 
      <id>central</id> 
      <url> 
       http://<releases-url> 
      </url> 
      **<snapshots> 
       <enabled>false</enabled> 
      </snapshots>** 
     </repository> 

     <repository> 
      <id>snapshots</id> 
      <url> 
       http://<snapshots-url> 
      </url> 
      <snapshots> 
       **<enabled>true</enabled>** 
       <!-- never, daily, interval:X (where X is in minutes) or always --> 
       <!--<updatePolicy>daily</updatePolicy> --> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </repository> 
    </repositories> 
+0

Это работает, хотя вы должны отметить, что это относится к разделу профилей файла настроек Maven settings.xml. – Kris

+0

Мы храним его в нашем файле master/parent pom, который наследует все наши проекты. Таким образом, разработчикам не нужно настраивать это в своих файлах settings.xml. Settings.xml - это прежде всего материал, специфичный для машины или пользователя, и все разработчики проекта обычно должны использовать один и тот же репозиторий. Хотя вы можете помещать репозитории в файл settings.xml, я бы подумал, что это будет случай исключения, а не норма. – kevinmrohr

+0

Очень странно, что я могу развернуть моментальные снимки без этого, но загрузка развернутых снимков невозможна. Настройка профиля работает нормально. – Betlista