Trước đây tôi đã đưa ra một câu hỏi về cách thay đổi vesion dự án Maven từ dòng lệnh dẫn tôi đến một vấn đề mới.
Trước đây tôi có thể lấy số phiên bản vì phiên bản được lưu trữ dưới dạng một thuộc tính dễ grep và phân tích từ dòng lệnh (bash). Bây giờ phần tử pom.xml được sử dụng cho việc này, nó không còn là duy nhất vì tất cả các phụ thuộc và có thể một số người khác cũng sử dụng phần tử này. Tôi nghĩ rằng không có cách nào để có được số phiên bản hiện tại với tập lệnh bash mà không có các công cụ bên ngoài để phân tích cú pháp xml hoặc một số lệnh sed nhận biết ngữ cảnh.
Giải pháp sạch nhất trong ý kiến của tôi sẽ là Maven cung cấp thông tin phiên bản này. Tôi đã nghĩ đến việc viết một plugin maven tùy chỉnh để lấy các thuộc tính khác nhau nhưng tôi nghĩ tôi sẽ hỏi ở đây trước.
Vì vậy, có cách nào dễ dàng để có được giá trị của ${project.version}
dòng lệnh không? Cảm ơn trước.
Giải pháp
Cảm ơn bạn vì sự giúp đỡ. Tôi đã phải cd
vào thư mục bằng tay nhưng điều đó có thể được thực hiện dễ dàng. Trong kịch bản bash của tôi, tôi có
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 } }'`
Cung cấp cho tôi phiên bản hiện tại mà sau đó tôi có thể tiến lên. Việc cắt xén có thể đơn giản hơn nhưng tôi nghĩ tôi muốn mạnh mẽ nhất có thể, vì vậy tôi hài lòng với dòng đầu tiên bắt đầu bằng một số và cố gắng xử lý đây là số phiên bản.
# 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/"
}
Và tôi sử dụng điều này bằng cách gọi
new_version=$(advance_version $version)
Hy vọng điều này sẽ giúp được ai đó.
grep -e '^[[:digit:]]'