ก่อนหน้านี้ฉันออกคำถามเกี่ยวกับวิธีการเปลี่ยนเวอร์ชัน Maven ของโครงการจากบรรทัดคำสั่งซึ่งนำฉันไปสู่ปัญหาใหม่
ก่อนหน้านี้ฉันสามารถรับหมายเลขเวอร์ชันได้เนื่องจากเวอร์ชันถูกเก็บเป็นคุณสมบัติที่ง่ายต่อการ grep และแยกวิเคราะห์จากบรรทัดคำสั่ง (bash) ตอนนี้องค์ประกอบ pom.xml ถูกใช้สำหรับสิ่งนี้มันไม่ได้เป็นเอกลักษณ์อีกต่อไปตั้งแต่การอ้างอิงทั้งหมดและบางทีบางคนก็ใช้สิ่งนี้เช่นกัน ฉันคิดว่าไม่มีวิธีรับหมายเลขเวอร์ชันปัจจุบันด้วยสคริปต์ทุบตีโดยไม่มีเครื่องมือภายนอกสำหรับการแยกวิเคราะห์ xml หรือคำสั่ง sed ที่รับรู้บริบทมาก
ทางออกที่สะอาดที่สุดใน Verifynion ของฉันคือ Maven จะแจกข้อมูลรุ่นนี้ ฉันคิดว่าจะเขียนปลั๊กอิน 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 } }'`
ซึ่งให้ฉันเวอร์ชันปัจจุบันที่ฉันสามารถล่วงหน้า การ grepping อาจจะง่ายกว่า แต่ฉันคิดว่าฉันต้องการความแข็งแกร่งที่สุดเท่าที่จะเป็นไปได้ดังนั้นฉันจึงพอใจกับบรรทัดแรกที่เริ่มต้นด้วยตัวเลขและพยายามจัดการมันเป็นหมายเลขเวอร์ชัน
# 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:]]'