Poprzednio zadałem pytanie, jak zmienić wersję projektu Maven z wiersza poleceń, co doprowadziło mnie do nowego problemu.
Wcześniej byłem w stanie uzyskać numer wersji, ponieważ wersja była przechowywana jako właściwość, którą łatwo było grepować i analizować z linii poleceń (bash). Teraz, gdy użyto do tego elementu pom.xml, nie jest on już unikalny, ponieważ wszystkie zależności i być może niektórzy inni też tego używają. Myślę, że nie ma sposobu, aby uzyskać bieżący numer wersji za pomocą skryptu bash bez zewnętrznych narzędzi do parsowania xml lub jakiegoś bardzo kontekstowego polecenia sed.
Moim zdaniem najczystszym rozwiązaniem byłoby przekazanie przez Maven tej informacji o wersji. Myślałem o napisaniu niestandardowej wtyczki maven do wyszukiwania różnych właściwości, ale pomyślałem, że najpierw zapytam tutaj.
Czy jest więc jakiś prosty sposób na uzyskanie wartości w ${project.version}
wierszu poleceń? Z góry dziękuję.
Rozwiązanie
Dziękuję za pomoc. Musiałem cd
ręcznie przejść do katalogu, ale można to łatwo zrobić. W moim skrypcie bash mam
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 } }'`
Co daje mi aktualną wersję, którą mogę później ulepszyć. Grepping może być prostszy, ale pomyślałem, że chciałbym być tak solidny, jak to możliwe, więc jestem zadowolony z pierwszej linii, która zaczyna się od cyfry i staram się traktować to jako numer wersji.
# 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/"
}
I używam tego po prostu dzwoniąc
new_version=$(advance_version $version)
Mam nadzieję, że to komuś pomoże.
grep -e '^[[:digit:]]'