Предыдущее Я выпустил вопрос о о том, как изменить проект Maven vesion из командной строки, что приведет меня к новой проблеме.
Раньше мне удалось получить номер версии, поскольку версия была сохранена как свойство, которое было легко grep и проанализировать из командной строки (bash). Теперь, когда элемент pom.xml используется для этого, он больше не уникален, так как все зависимости и, возможно, некоторые другие тоже используют это. Я думаю, что нет способа получить текущий номер версии с помощью bash script без внешних инструментов для синтаксического анализа xml или некоторой команды sed с поддержкой контекста.
Самым чистым решением в моем мнении было бы для Maven передать эту информацию о версии. Я подумывал написать собственный плагин maven для извлечения разных свойств, но я подумал, что сначала попрошу.
Итак, есть ли простой способ получить значение ${project.version}
в командной строке? Спасибо заранее.
Решение
Спасибо за помощь. Я должен был cd
в каталог вручную, но это можно сделать легко. В моем bash script у меня есть
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)
Надеюсь, это поможет кому-то.