DEV Community

loading...
Cover image for Parsing maven version with bash

Parsing maven version with bash

Pavel Polívka
Father, developer, bad sci-fi writer, love to learn stuff
・1 min read

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 word version 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

Discussion (1)

Collapse
khmarbaise profile image
Karl Heinz Marbaise

I would like to suggest a simpler and safer solution:

VERSION=$(mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version))

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...