Как настроить внутренний репозиторий Archiva + снапшот для Maven?

Мы пытаемся использовать Archiva в качестве прокси Maven для центральных и других внешних репозиториев, а также в качестве хранилища моментальных снимков для наших артефактов, которые автоматически создаются Хадсоном из SVN и устанавливаются в репозиторий моментальных снимков.

Я не могу настроить свой клиент Maven для совместного использования внутреннего репозитория и репозитория моментальных снимков. У моего проекта есть некоторые внешние зависимости (например, log4j), которые правильно загружаются из внутреннего репозитория Archiva. Также мой проект зависит от собственного проекта, артефакт которого уже создан и установлен в репозиторий моментальных снимков. Однако, если я попытаюсь создать проект, Maven не сможет найти артефакт моего снимка.

В моем файле конфигурации изначально был этот параметр:

<mirror>
  <id>company-internal</id>
  <name>Company's Archiva - Internal Repository</name>
  <url>http://www.mycompany.hu/archiva/repository/internal</url>
  <mirrorOf>*</mirrorOf>
</mirror>

а затем я добавил следующее:

<mirror>
 <id>company-snapshots</id>
 <name>Company Archiva - Snapshots Repository</name>
 <url>http://www.mycompany.hu/archiva/repository/snapshots</url>
 <mirrorOf>apache.snapshots</mirrorOf>
</mirror>

Однако Maven не пытается найти репозиторий снимков при сборке. Что я сделал не так? Кстати, я не совсем понимаю цель <mirrorOf> элементов. Я попытался заменить это в настройках внутреннего зеркала на central, но это все еще не решает мою проблему.


person NagyI    schedule 15.09.2011    source источник


Ответы (3)


Следующая конфигурация сработала у меня после некоторых проб и ошибок. Здесь я использовал конфигурацию архивирования по умолчанию - internal для хранения выпусков и snapshots для хранения только внутренних снимков.

По сути, в отличие от nexus нам нужны два отдельных объявления <mirror> и <repository> - одно для обычных артефактов, а другое для артефактов моментальных снимков.

<mirrors>
    <mirror>
        <id>archiva</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8080/archiva/repository/internal</url>
    </mirror>
    <mirror>
        <id>snapshots</id>
        <mirrorOf>snapshots</mirrorOf>
        <url>http://localhost:8080/archiva/repository/snapshots</url>
    </mirror>
</mirrors>
<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
              <id>internal</id>
              <name>Archiva Managed Internal Repository</name>
              <url>http://localhost:8080/archiva/repository/internal/</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </repository>
            <repository>
              <id>snapshots</id>
              <name>Archiva Managed Internal Repository</name>
              <url>http://localhost:8080/archiva/repository/snapshots/</url>
              <releases>
                <enabled>false</enabled>
              </releases>
              <snapshots>
                <enabled>true</enabled>
              </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>
person Raghuram    schedule 15.09.2011
comment
Спасибо, скоро попробую. - person NagyI; 15.09.2011
comment
Ну это еще не работает. Теперь он даже не загружает внутренние артефакты :( Вот моя конфигурация, не могли бы вы взглянуть на нее? pastebin.com/czG8uTFt - person NagyI; 16.09.2011
comment
@Nagyl. Я работал с artifactory и nexus, но не с archiva. Я установил / настроил его и, надеюсь, обновил ответ с решением вашей проблемы - person Raghuram; 22.09.2011

Путем проб и ошибок я пришел к конфигурации, очень похожей на конфигурацию Рагурама. Тем не менее, используя archiva, я обнаружил одну или две вещи, которые все же заслуживают внимания. Кроме того, я использовал зеркала в своей конфигурации для доступа к моим проектам (установленным в <distributionManagement/> в pom.xml) вместо прямого доступа к репозиториям.

Это соответствующая часть моего maven settings.xml:

<!-- set up servers to point to mirror, for use in project pom -->
<servers>
  <server>
    <id>my.snapshots</id> <!-- use name of the mirror here -->
    <username>user</username>
    <password>pwd</password>
  </server>
</servers>

<!-- map mirror names to actual repositories -->
<mirrors>
  <!-- leave the default mirror in place -->
  <mirror>
    <id>archiva.default</id>
    <mirrorOf>*</mirrorOf>
    <url>http://server:port/archiva/repository/internal/</url>
  </mirror>
  <!-- enter my own -->
  <mirror>
    <id>my.snapshots</id>
    <mirrorOf>archiva.snapshots</mirrorOf>
    <url>http://server:port/archiva/repository/snapshots/</url>
  </mirror>
<mirrors>

<!-- activate the repo for artifact downloads by setting profile -->
<profiles>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <repositories>
    <repository> <!-- mirror will be used during runtime instead of this -->
      <id>archiva.snapshots</id> <!-- do not use mirror name here -->
      <url>http://server:port/archiva/repository/snapshots/</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
</profile>

Я обнаружил, что мне пришлось указать идентификаторы в разделе <mirrors>, а не в разделе <profiles>, поэтому мне, похоже, не разрешалось давать им то же имя, что и Рагурам.

Теперь, когда установлен файл settings.xml, я решил изменить раздел <distributionManagement> в файле pom.xml моего проекта. Чтобы быть точным, я изменил этот параметр в pom, который является родительским для всех моих проектов: он в основном содержит раздел <distributionManagement> и немного больше. Этот родительский pom сам развертывается в архиве.

Это соответствующий раздел родительского файла pom.xml:

<distributionManagement>
  <repository>
    ...
  </repository>
  <snapshotRepository>
    <id>my.snapshots</id>
    <name>Archiva Managed Snapshot Repository</name>
    <url>http://server:port/archiva/repository/snapshots</url>
    <layout>default</layout>
  </snapshotRepository>
</distributionManagement>

Такого рода упрощенные вещи, я думаю, имеют некоторые преимущества:

  • Теперь я могу создавать проекты в зависимости от моих собственных артефактов (включая родительский pom), не имея ни одного из этих артефактов в моем локальном репозитории сборки (я вытер свой локальный репозиторий для тестирования).

  • Загрузки (разделы <dependencies> файла pom.xml), а также загрузки (разделы <distributionManagement> файла pom.xml) теперь обрабатываются через зеркала.

person Simon Hellinger    schedule 22.09.2011

Путем проб и ошибок я тоже пришел к конфигурации, очень похожей на предыдущую, но у меня ничего не получалось, пока я не сделал эту конфигурацию ниже. Следовательно, я публикую его в попытке улучшить ответ, если вы используете maven с помощью репозитория вашей организации вместо использования на своем локальном хосте.

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

my.snapshots пользовательский pwd

<!-- map mirror names to actual repositories -->
<mirrors>
   <!-- enter my own -->
  <mirror>
    <id>my.snapshots</id>
    <mirrorOf>archiva.snapshots</mirrorOf> <!-- this name should be the same as configured for the below repository id.>
    <url>http://server:port/archiva/repository/snapshots/</url>
  </mirror>
  <!-- leave the default mirror in place -->
  <mirror>
    <id>archiva.default</id>
    <mirrorOf>central</mirrorOf> < !-- Instead of *, replace it with "central"-->
    <url>http://server:port/archiva/repository/internal/</url>
  </mirror>
<mirrors>

<!-- activate the repo for artifact downloads by setting profile -->
<profiles>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <repositories>
    <repository> <!-- mirror will be used during runtime instead of this -->
      <id>archiva.snapshots</id> <!-- do not use mirror name here -->
      <url>http://server:port/archiva/repository/snapshots/</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
</profile>
person kagopiee    schedule 25.08.2014