Иерархическая структура тегов с Maven релизами - PullRequest
0 голосов
/ 06 марта 2012

У нас есть несколько небольших проектов в одном SVN-хранилище. Репозиторий имеет следующую структуру:

/trunk
   /artifactId1
   /artifactId2
   /groupId
      /artifactId3
      /artifactId4
/branches
  ... see above
/tags

Так что это выглядит как хранилище maven.

Теперь я хочу, чтобы плагин релиза maven создавал похожую структуру при тегировании. Я изменил конфигурацию плагина на:

<tagNameFormat>@{project.groupId}/@{project.artifactId}/@{project.version}</tagNameFormat>

Плагин Maven Release создаст правильный URL-адрес SVN: https://repo/tags/groupId/artifactId3/1.0.0

Однако структура пути еще не существует в репозитории, поэтому действие тега SVN не выполняется.

Я не хочу создавать структуру пути каждый раз, когда в репозиторий SVN добавляется новый артефакт, для которого требуется поддержка тегов. Есть ли способ настроить maven для создания родительской структуры перед тегированием? Или мне нужно создать плагин для Maven, который делает это?

Ответы [ 3 ]

1 голос
/ 02 апреля 2013

Поскольку вы обнаруживаете, что вложенные теги и ветви - это не путь - никакие инструменты не будут хорошо с ними работать из коробки.

Похоже, что ArtifactID1-4 - это отдельные проекты SVN, которые не собираются и не выпускаются вместе. Возможно, каждый из них должен быть проектом в SVN со своими собственными тегами веток и папками транка. Вы избежите упомянутого беспорядка, а также беспорядка вложенных веток и тегов.

0 голосов
/ 08 июня 2012

Я уже сталкивался с такой проблемой, но я не дам вам прямого ответа, чтобы решить ваши проблемы. В самом деле, вы пытаетесь сделать что-то, что не по-мавенски ...

Насколько я понимаю, вы пытаетесь пометить:

  • только один артефакт, помещая его в groupId / artifactID / version
  • или все репо (например, все под стволом).

Пометка одного артефакта

Только в случае пометки артефакта3 вы правы. В первый раз, когда вы пытаетесь пометить тегом, вы не можете сделать это, потому что полная структура не может быть создана одним коммандом (тег svn действительно является копией, а команда копирования не поддерживает опцию, позволяющую копировать И создавать каталог, например, " mkdir -p "в Linux.

Но, несмотря на то, что условные обозначения Maven (поведение по умолчанию) - это теги / artifactId-версия, вы можете предварительно создать собственную структуру и собственный шаблон для выполнения выпуска (через IDE или в командной строке svn). Затем измените tagNameFormat по своему желанию (и, как вам кажется):

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
          <tagNameFormat>${groupId}/${artifactId}/@{project.version}</tagNameFormat>
        </configuration>
      </plugin>
      [...]
    </plugins>
    [...]
  </build>
  [...]
</project>

Вы также можете изменить tagBase, как сказал khmarbaise, с помощью комбинации tagBase и tagFormat (для переопределения поведения по умолчанию). Я никогда не пробовал это, но это должно работать. Обратите внимание, что в версии используется @, а не $ (ее нельзя заменять во время коммита или до, но использовать позже во время операции taggin).

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

Пометка всех артефактов

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

  • если ваши компоненты связаны друг с другом, просто соберите многомодульный проект (и запустите на нем выпуск mvn) со всеми вложенными модулями (это правильный путь)
  • если нет, вам не придется помечать их вместе; D

Если я ошибаюсь в ваших намерениях, не стесняйтесь отвечать мне, предоставляя дополнительную информацию.

Удачи:)

0 голосов
/ 14 марта 2012

Проблема заключается в том, что в папке тегов нет папок groupId и artifactid.Вам нужно установить tagBase с конфигурацией вашего релизного плагина.Это можно сделать в разделе управления плагином в вашем супер-помпе.

...