Попередньо я випустив питання про те, як змінити візію проекту Maven з командного рядка, що призвело до нового питання.
Раніше мені вдалося отримати номер версії, оскільки версія зберігалася як властивість, яку легко було зібрати та проаналізувати з командного рядка (bash). Тепер, коли для цього використовується елемент pom.xml, він більше не є унікальним, оскільки всі залежності і, можливо, деякі інші теж використовують це. Я думаю, що немає можливості отримати номер поточної версії за допомогою скрипту bash без зовнішніх інструментів для розбору xml або якоїсь дуже контекстної команди sed.
На мою думку, найчистішим рішенням було б Мевен роздати інформацію про цю версію. Я думав написати спеціальний плагін Maven для отримання різних властивостей, але я подумав, що спочатку запитаю тут.
Отже, чи є простий спосіб отримати значення ${project.version}
в командному рядку? Заздалегідь спасибі.
Рішення
Дякую за допомогу. Довелося до cd
каталогу вручну, але це можна зробити легко. У моєму баш сценарії є
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:]]'