पिछली बार मैंने एक सवाल जारी किया था कि कमांड लाइन से मैवेन प्रोजेक्ट वेशन को कैसे बदला जाए जो मुझे एक नए मुद्दे की ओर ले जाए।
पहले मैं संस्करण संख्या प्राप्त करने में सक्षम था क्योंकि संस्करण को एक संपत्ति के रूप में संग्रहीत किया गया था जो कमांड लाइन (बैश) से जीआरईपी और पार्स करना आसान था। अब चूंकि pom.xml तत्व का उपयोग इसके लिए किया जाता है, इसलिए यह सभी निर्भरताओं के बाद से अद्वितीय नहीं है और शायद कुछ अन्य भी इसका उपयोग करते हैं। मुझे लगता है कि एक्सएमएल या कुछ बहुत ही संदर्भ-जागरूक सेड कमांड को पार्स करने के लिए बाहरी टूल के बिना बैश स्क्रिप्ट के साथ वर्तमान संस्करण संख्या प्राप्त करने का कोई तरीका नहीं है ।
मेरे संस्करण में सबसे साफ समाधान मावेन के लिए इस संस्करण की जानकारी को सौंपने के लिए होगा। मैं विभिन्न गुणों को पुनः प्राप्त करने के लिए एक कस्टम मावेन प्लगइन लिखने के बारे में सोच रहा था, लेकिन मुझे लगा कि मैं यहां पहले पूछूंगा।
तो, क्या ${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:]]'