Как автоматизировать процесс обновления версии для моего плагина 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, или я использовал его не очень хорошо.
Ответы
Ответ 1
Для этой проблемы существует специальная tycho-versions-plugin. Он (намеренно) делает то же самое, что и плагин 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
. Эта версия также автоматически обновляется до последней версии как часть обычной сборки.
Ответ 2
Я хотел бы добавить некоторые практические советы для менее опытных пользователей maven, таких как я, чтобы Тобиас Оберлис:
Цель tycho-versions:set-version
изменит версию всех проектов, на которые ссылаются мастера. Строки версии конфигурационных файлов maven (pom.xml), а также соответствующие артефакты Eclipse/OSGi (MANIFEST.MF, feture.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 или определите свойство с этим именем и соответствующее значение.