Как автоматизировать процесс обновления номера версии для моего плагина Eclipse, созданного с помощью Maven

Я работаю над проектом, похожим на проект, описанный здесь. Итак, у него есть несколько модулей в родительском файле pom.xml:

 <modules>
    <module>../de.vogella.tycho.plugin</module>
    <module>../de.vogella.tycho.feature</module>
    <module>../de.vogella.tycho.p2updatesite</module>
 </modules>

Эти модули имеют общий номер версии, например. 1.0.0-SNAPSHOT или без -SNAPSHOT. Файл feature.xml должен содержать тот же номер версии:

<feature
      id="com.my.feature"
      label="My plugin feature"
      version="1.0.0">

и:

<plugin
      id="com.my.plugin"
      download-size="0"
      install-size="0"
      version="1.0.0"
      unpack="false"/>

Файлы category.xml (в проектах сайта обновлений p2) и MANIFEST.MF (в проектах плагинов) должны содержать одно и то же значение.

Возникает вопрос: как автоматизировать процесс обновления номера версии во всех этих файлах с помощью Maven?

Я попытался решить эту проблему, используя maven-release-plugin и maven-versions-plugin. Первый плагин делает много неиспользуемых действий (например, делает много коммитов CVS, которые я не использую в этом проекте). Второй плагин вносит изменения только в файлы pom.xml и не изменяет feature.xml, category.xml и MANIFEST.MF, или я использовал его не так хорошо.


person Dmitry Gridyushko    schedule 17.07.2012    source источник
comment
Где находятся файлы, которые необходимо обновить? Думаете о фильтрации этих файлов?   -  person khmarbaise    schedule 17.07.2012


Ответы (2)


Для именно эта проблема. Он (намеренно) делает то же самое, что и плагин maven-versions-plugin, но также обновляет (избыточные) версии в feature.xml и MANIFEST.MF.

Более того, подключаемый модуль также обновляет ссылки, указывающие точную версию, например ссылки на подключаемые модули в файле feature.xml или ссылки на функции в файле category.xml. Таким образом, в конце все вхождения версий артефакта обновляются, как при рефакторинге.

Для ссылок с точными версиями также есть автоматическое обновление во время обычной сборки Tycho. Итак, если, например. ваша функция ссылается на ваш плагин в версии 1.0.0.qualifier, эта строка версии обновляется с фактическим значением квалификатора, например. 1.0.0.201207171147. Вы можете использовать эту функциональность, чтобы свести к минимуму количество мест, которые должны быть обновлены плагином tycho-versions-plugin: Вместо того, чтобы указывать литерал текущей версии в ссылке, вы можете использовать волшебную версию 0.0.0. Эта версия также автоматически обновляется до последней версии в рамках обычной сборки.

person oberlies    schedule 17.07.2012

Я хотел бы добавить несколько практических советов для менее опытных пользователей maven, таких как я, к ответу Tobias Oberlies:

Цель tycho-versions:set-version изменит версию всех проектов, на которые ссылается мастер pom. Строки версии файлов конфигурации maven (pom.xml), а также соответствующих артефактов Eclipse/OSGi (MANIFEST.MF, feature.xml, category.xml) будут последовательно изменяться.

Чтобы запустить цель из командной строки, используйте следующее:

mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=1.2.0-SNAPSHOT

Свойство пользователя newVersion, 1.2.0-SNAPSHOT в этом примере, является новой устанавливаемой версией.

Приведенная выше командная строка будет использовать последнюю версию файла tycho-versions-plugin. Если необходимо использовать определенную версию плагина, необходимо добавить tycho-version-plugin к элементу project/build/plugins главного pom.

<plugin>
  <groupId>org.eclipse.tycho</groupId>  
  <artifactId>tycho-versions-plugin</artifactId>  
  <version>${tycho-version}</version>  
</plugin> 

Замените ${tycho-version} на текущую версию Tycho или определите свойство с таким именем и соответствующим значением.

person Rüdiger Herrmann    schedule 06.12.2015
comment
Почему вы хотите определить newVersion в POM? - person oberlies; 07.12.2015
comment
Спасибо за подсказку. Если подумать, вы, вероятно, правы в том, что очень маловероятно, что кто-то захочет сохранить новую версию в файле pom. - person Rüdiger Herrmann; 07.12.2015
comment
Спасибо! Работает как шарм! - person Nicolas Rouquette; 27.01.2017
comment
В pom он указывает версию плагина Tycho, а не newVersion. - person lorenzo-bettini; 16.12.2019