Получить версию конкретного модуля в многомодульном проекте maven

#maven #maven-3 #multi-module

#maven #maven-3 #многомодульный

Вопрос:

У меня есть проект с несколькими модулями maven. Мне нужно получить текущую версию модуля.

 Parent Pom (2.4.0)
|- module1 1.5.0
|- module2 1.3.4
|- module3 1.2.5
  

Получить версию module2 вернет 1.3.4 .

К вашему сведению: module1 возможно, зависимость от module2 .

Найден один из способов сделать это

 mvn depedency:tree -X |  awk '/module1/ {split($0, a, ":"); if (a[4]) {print a[4]; exit}}'
  

Предпочел бы более чистый способ сделать это.

Ответ №1:

Есть несколько решений, но все они основаны на одной и той же логике:

mvn -f model2 org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout

С -f model2 помощью или -f model2/pom.xml вы указываете путь к pom.xml

При org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate этом вы вызываете цель оценки maven-help-plugin. Если у pom уже есть заблокированная версия этого плагина, вы можете просто использовать help:evaluate

При -Dexpression=project.version этом вы указываете, что вы хотите знать. В случае, если он начинается с project, вы следуете структуре xml pom.

При -q этом вы подавляете ведение журнала вывода, обрабатываемое структурой ведения журнала Maven.

Но это также привело бы к подавлению результата оценки цели. Следовательно, при использовании -DforceStdout результат будет виден, поскольку он обходит структуру ведения журнала.

Комментарии:

1. Спасибо! это гораздо более чистый способ сделать это. Использовал это как пример bash, показанный на maven.apache.org/plugins/maven-help-plugin/evaluate-mojo.html чтобы присвоить переменной, затем либо повторите ее, либо используйте переменную дальше. Приветствия!