URL-адрес SCM относительно родительского URL-адреса SCM в POM - PullRequest
6 голосов
/ 02 февраля 2011

У меня есть проект Maven, состоящий из нескольких модулей и субмодулей.Я использую SVN для создания версий исходных файлов.

Краткий рассказ

Как указать URL-адрес в свойствах scm файла POM, относящихся к свойствам его родителя.

Длинная история

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

Для этого у меня есть два SVN-макета в моем хранилище.Один содержит все сообщения о стволах / ветках / тегах, другой содержит чистый готовый к извлечению рабочий каталог с svn: внешние ссылки на соединительные линии.

Это выглядит так;У вас есть реальная разметка SVN с беспорядком ствола / веток / тегов:

  • pom.xml (основной родительский элемент)
  • utils
    • ветви
    • теги
    • транк
      • pom.xml , src, target и т. д. ...
  • модель данных ( выпущено )
    • ветви
    • теги
    • транк
      • pom.xml
      • lib
        • pom.xml ,src, target и т. д. *
      • сервер
        • pom.xml , src, target и т. д..
      • клиент
        • pom.xml , источник, цель и т. Д. ...
  • bin-modules
    • bin-module-1 ( выпущено )
      • ветви
      • теги
      • транк
        • pom.xml , src, target и т. Д. ...
    • bin-module-2 ( освобожден )
      • ветви
      • теги
      • магистраль
        • pom.xml , src, target и т.д ...

Ичистый макет рабочей директории, скрывающий ветки / ствол с помощью тегов "svn: externals":

  • pom.xml (основной родительский элемент)
  • утилит (-> утилит / транк )
    • pom.xml , src, target и т.д ...
  • модель данных (-> модель данных / магистраль )
    • pom.xml
      • lib
        • pom.xml , src, target и т.д ...
      • сервер
        • pom.xml , src, target и т. Д. ...
      • клиент
        • pom.xml , src, target и т.д ...
  • бин-модули
    • pom.xml
    • bin-module-1 (-> bin-module-1 / trunk )
      • pom.xml , src, target и т.д ...
    • bin-module-2 (-> bin-module-2 / trunk)
      • pom.xml , src, target и т.д. ...

Пока все хорошо.Я установил корневые URL-адреса SCM в своем родительском POM, и Maven правильно подразумевает URL-адреса для подмодулей.Я проверил это с помощью mvn help:effective-pom

У меня есть следующие URL-адреса scm:

  • root : [root-url]
  • utils : [root-url] / utils
  • модель данных : [root-url] / data-model /
  • data-model / lib : [корневой URL] / модель данных / lib
  • модель данных / клиент : [корневой URL] / модель данных / клиент
  • модель данных / сервер : [root-url] / модель данных / сервер
  • bin-module-1 : [root-url]/ бен-модуль-1 /
  • bin-module-2 : [root-url] / bin-module-2 /

Но Maven не знает о фактической структуре SVN. Хотелось бы увидеть:

  • root : [root-url]
  • utils : [root-url] / utils / trunk
  • модель данных : [root-url] / модель данных / trunk
  • модель данных / lib : [root-url] / модель данных / trunk / lib
  • модель данных / клиент : [root-url] / модель данных / транк / клиент
  • модель данных / сервер : [root-url] / модель данных / транк / сервер
  • bin-module-1 : [root-url] / bin-module-1 / trunk
  • bin-module-2 : [root-url] / bin-module-2 / trunk

Для этого мне нужно добавить секцию scm в pom.xml из модели данных , bin-module-1 и бен-модуль-2 .

Я пробовал что-то вроде (для модели данных):

<scm>
    <connection>./data-model/trunk</connection>
    <developerConnection>./sdr/trunk</developerConnection>
    <url>./sdr/trunk</url
</scm>

или

<scm>
    <connection>${project.parent.scm.connection}/data-model/trunk</connection>
    <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection>
    <url>${project.parent.scm.url}/data-model/trunk</url>
</scm>

Но, похоже, никто не работает. Свойства $ {...} даже не заменяются. Итак, как мне переопределить путь SCM относительно его родительского URL-адреса SCM?

Любая помощь, совет, будет высоко ценится.

Заранее спасибо, Рафаэль

1 Ответ

5 голосов
/ 02 февраля 2011

Я бы подумал, что это работает:

<scm>
    <connection>${project.parent.scm.connection}/data-model/trunk</connection>
    <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection>
    <url>${project.parent.scm.url}/data-model/trunk</url>
</scm>

Если это не так, все еще есть возможность назначить эти значения программно (я буду использовать GMaven , чтобы сделать это, но вы также можете использовать плагин antrun или написать собственный плагин)

Сначала установите свойство

<properties>
    <relativeScmPath>data-model/trunk</relativeScmPath>
</properties>

Затем назначьте относительное смещение для всех свойств SCM:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>assign-scm</id>
            <phase>validate</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                <![CDATA[
                def parentScm = project.parent.scm;
                def thisScm = project.scm;
                def relPath = project.properties['relativeScmPath'];
                ['connection','developerConnection','url'].each{
                    thisScm[it] = parentScm[it] + relPath;
                }
                ]]>
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>

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

...