Ранее я выпустил вопрос о том, как изменить версию проекта 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)
Надеюсь, это кому-нибудь поможет.
grep -e '^[[:digit:]]'