Sebelumnya saya mengeluarkan pertanyaan tentang bagaimana mengubah vesion proyek Maven dari baris perintah yang membawa saya ke masalah baru.
Sebelumnya saya bisa mendapatkan nomor versi karena versi disimpan sebagai properti yang mudah untuk di-grep dan diurai dari baris perintah (bash). Sekarang elemen pom.xml digunakan untuk ini, tidak lagi unik karena semua dependensi dan mungkin beberapa orang lain juga menggunakan ini. Saya pikir tidak ada cara untuk mendapatkan nomor versi saat ini dengan skrip bash tanpa alat eksternal untuk parsing xml atau perintah sed yang sangat memperhatikan konteks.
Solusi paling bersih menurut saya adalah bagi Maven untuk membagikan informasi versi ini. Saya sedang berpikir untuk menulis plugin pakar untuk mengambil properti yang berbeda tapi saya pikir saya akan bertanya di sini dulu.
Jadi, apakah ada cara mudah untuk mendapatkan nilai dari ${project.version}
ke baris perintah? Terima kasih sebelumnya.
Larutan
Terima kasih atas bantuannya. Saya harus ke cd
direktori secara manual tetapi itu bisa dilakukan dengan mudah. Dalam skrip bash saya, saya punya
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 } }'`
Yang memberi saya versi saat ini yang kemudian bisa saya lanjutkan. Grepping mungkin lebih sederhana tetapi saya pikir saya ingin sekuat mungkin, jadi saya puas dengan baris pertama yang dimulai dengan angka dan mencoba untuk menangani ini sebagai nomor versi.
# 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/"
}
Dan saya menggunakan ini hanya dengan menelepon
new_version=$(advance_version $version)
Semoga ini bisa membantu seseorang.
grep -e '^[[:digit:]]'