2012-03-06 3 views
0

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

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

Таким образом, это похоже на хранилище maven.

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

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

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

Однако структура путь еще не существует в хранилище, так что «тег» действие SVN не удается ,

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

+1

В чем причина не создания структуры каталогов TTB по умолчанию в svn? – khmarbaise

+0

@khmarbaise, потому что это создает беспорядок, когда у вас много артефактов и регулярных выпусков. – elmuerte

+1

Если это создает беспорядок, переместите старые теги в тегах/архиве, даже если это явно не лучшее решение (ссылки scm в вас pom не будут следовать вашим ходам) –

ответ

0

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

0

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

За то, что я понимаю, вы пытаетесь помечать:

  • только один артефакт, поместив его в идентификатор_группы/артефакта/версия
  • или все репо (например, все под багажником).

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

В случае мечения только artifact3, вы правы. В первый раз, когда вы пытаетесь пометить, вы не можете сделать это, потому что полная структура не может быть создана в одной команде (тэг 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

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

Удачи :)

1

Как вы найти вложенные теги и филиалы не являются путь - не инструмент не будет хорошо играть с ними из коробки.

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