Как настроить внутренний архив + хранилище снимков для Maven? - PullRequest
16 голосов
/ 15 сентября 2011

Мы пытаемся использовать Archiva в качестве прокси-сервера Maven для центрального и других внешних хранилищ, а также в качестве хранилища снимков для наших артефактов, которые автоматически создаются Hudson из 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, но это все еще не решило мою проблему.

Ответы [ 3 ]

17 голосов
/ 15 сентября 2011

Следующая конфигурация сработала для меня после проб и ошибок. Здесь я использовал конфигурацию архива по умолчанию - 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>
2 голосов
/ 22 сентября 2011

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

Это релевантная часть моих настроек maven.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) теперь обрабатываются с помощьюзеркала.

1 голос
/ 25 августа 2014

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

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

my.snapshots user 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>
...