Recently I needed to parse my pom.xml
file to get the artifact version out of it. I needed it on one of our CI agents and I did not have maven installed. I wrote a bash command to parse.
Here it is
grep version pom.xml | grep -v -e '<?xml|~'| head -n 1 | sed 's/[[:space:]]//g' | sed -E 's/<.{0,1}version>//g' | awk '{print $1}'
Let’s go over it step by step to help us understand it better
-
grep version pom.xml
- this till get you all the lines with wordversion
in them -
grep –v –e '<?xml|~'
– this will exclude all the matches (-v is reverse match) that are matching the regex (-e), there can be XML specification in the POM file -
head –n 1
- only the first match -
sed 's/[[:space:]]//g'
- this removes the spaces around/in version string -
sed -E 's/<.{0,1}version>//g'
- this removed the<version>
and</version>
tags -
awk '{print $1}'
- prints the result
Top comments (2)
I would like to suggest a simpler and safer solution:
And if you have a ci agent you can run Maven on it...or you can use the CI like Jenkins and read the pom file like this:
github.com/jenkinsci/pipeline-exam...
Usually using a CI will do the installation of Maven automatically on the node for example as Jenkins does...
Don't parse xml without an xml parser, it is not mandatory that the first version tag is the one of your project, it could be the parent pom, it could be anything... Maven provides you with the tools to access all of its data (see dev.to/khmarbaise/comment/14ndf).