2010-08-19 2 views
9

Прежде всего, у меня есть какое-то понимание того, что следующее не может быть общепринятым способом делать что-то.Обновление версии проекта Maven из сценария

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

Однако моя проблема заключается в обновлении версии pom из командной строки. Я могу сделать это с помощью sed, но я не думаю, что это очень удобно. Мне было интересно, есть ли какой-либо плагин maven, который мог бы изменить pom.xml непосредственно из командной строки. Версия устанавливается в разделе свойств pom. Можно ли написать плагин, который изменит свойства?

Заранее спасибо.

Update

Кажется, что моя проблема была с версиями проекта определяется как свойствами (которые были применены при фильтрации), который кажется теперь немного глупо.

Одна вещь, которую я все еще ищу, - это то, как надежно получить версию определенного проекта в командной строке. Раньше у меня было свойство «довольно уникальное», которое я получил с помощью grep, но теперь элемент <version> не уникален, так как в дочернем проекте есть по крайней мере два из них. Мне нужен какой-то XML-парсер, если у Maven нет решений, но моя цель - сделать скрипт как можно более независимым.

Я не уверен, должен ли я создать новый вопрос из этого, но я этого не сделал. Получение версии очень тесно связано с настройкой версии.

ответ

13

Мне было интересно, есть ли какой-либо плагин maven, который мог бы изменить pom.xml непосредственно из командной строки.

Versions Maven Plugin может это сделать. Уточните цель:

  • versions:set может использоваться для установки версии проекта из командной строки, при необходимости обновляя сведения о любых дочерних модулях.
+0

Спасибо! Я сам нашел этот плагин, но почему-то не понял, что плагин действительно может обновить pom.xml, а не просто отображать зависимости и т. Д. Установка версии не работает, так как версия определена в родительском пом в качестве свойства, о котором я и не подозревал. Тем не менее, я обнаружил, что есть цель «update-properties», которая может сделать трюк. – mkko

+0

Очевидно, что «свойства обновления» предназначены только для обновления зависимостей, а не для установки каких-либо значений. «version: set» - это ближайшее совпадение, но, похоже, нет способа определить версию в родительском pom таким образом - или, по крайней мере, как свойство. – mkko

+0

@mkko: 1. Вы на самом деле ** должны ** жестко закодировать версию в родительском POM и в элементах дочерних модулей '', см. [MNG-624] (http://jira.codehaus.org/browse/MNG-624) для исчерпывающих обсуждений по этому вопросу 2. Зависимости должны использовать встроенное свойство '$ {project.version}', нет веской причины использовать свойство для этой версии. Вот как это работает с Maven. 3. И тогда вы сможете использовать 'versions: set' (но это косвенное следствие того, что все правильно). –

1

От Maven POM reference:

env.X: Приставка переменную с "окр." вернет переменную окружения оболочки . Например, $ {env.PATH} содержит переменную среды PATH . Примечание. В то время как переменные среды сами являются с учетом регистра в Windows, поиск свойств чувствителен к регистру. В других словах , в то время как оболочка Windows возвращает то же значение для% PATH% и% Path%, . Maven различает $ {env.PATH} и $ {env.Path}. По состоянию на Maven 2.1.0, имена окружающей среды переменные нормализуются ко всем верхний регистр ради надежность.

Это означает, что вы можете иметь переменные окружения как $ MYMAVENPROJECTVERSION и читать его, как это:

<version>${env.MYMAVENPROJECTVERSION}</version> 

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

Надеюсь, это вам поможет.

+2

Это не будет работать с многомодульными сборками (вы должны ** жестко закодировать версию в элементе ''). –

+0

Что это значит? Вы не можете использовать заполнители в родительском разделе? его ошибка? – sourcerebels

+1

Точно, вы не можете использовать заполнители в родительском разделе. Это по дизайну. В Maven 3.1 разрешен вариант с меньшим родительским элементом. См. Http://jira.codehaus.org/browse/MNG-624 и все связанные с этим вопросы для интересных дискуссий по этой теме. –

Смежные вопросы