Раньше я задавал вопрос на , как изменить версию проекта Maven из командной строки , что привело меня к новой проблеме.
Ранее я мог получить номер версии, начиная с версиибыл сохранен как свойство, которое было легко найти и проанализировать из командной строки (bash).Теперь, когда для этого используется элемент pom.xml, он больше не является уникальным, поскольку все зависимости и, возможно, некоторые другие тоже используют это.Я думаю, что нет способа получить номер текущей версии с помощью bash-скрипта без внешних инструментов для разбора xml или какой-либо очень контекстно-зависимой команды sed.
Самое чистое решение на мой взглядбыло бы для Maven раздать эту информацию о версии.Я думал о том, чтобы написать собственный плагин maven для извлечения различных свойств, но я решил сначала спросить здесь.
Итак, есть ли простой способ получить значение ${project.version}
в командной строке?Заранее спасибо.
Решение
Спасибо за помощь.Мне пришлось cd
в каталог вручную, но это можно сделать легко.В моем bash-скрипте у меня есть
version=`cd $project_loc && mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`
, который дает мне текущую версию, которую я могу затем продвинуть.Грэппинг может быть проще, но я подумал, что хотел бы сделать его максимально надежным, поэтому я доволен первой строкой, начинающейся с числа, и попытаюсь обработать это как номер версии.
# Advances the last number of the given version string by one.
function advance_version () {
local v=$1
# Get the last number. First remove any suffixes (such as '-SNAPSHOT').
local cleaned=`echo $v | sed -e 's/[^0-9][^0-9]*$//'`
local last_num=`echo $cleaned | sed -e 's/[0-9]*\.//g'`
local next_num=$(($last_num+1))
# Finally replace the last number in version string with the new one.
echo $v | sed -e "s/[0-9][0-9]*\([^0-9]*\)$/$next_num/"
}
ИЯ использую это, просто позвонив по номеру
new_version=$(advance_version $version)
Надеюсь, это кому-нибудь поможет.