2007-07-05

XPath-basert XML-editor

Jeg hadde en spesifikk kløe i dag : bulk-redigering av Maven POM-filer for å endre innholdet i et bestemt element.

Så jeg laget XmlEditor for å sette innholdet i noder plukket ut ved hjelp av XPath.

Dersom du for eksempel skal endre versjonsnummeret i alle POM-filer til en gitt versjon, kan du gjøre følgende:

java XmlEditor /project/version:=9.9.9 `find . -name pom.xml`


Eller for å oppdatere til siste versjon av jUnit og log4j :
java XmlEditor \
"//dependency[artifactId='junit']/version:=4.3.1" \
"//dependency[artifactId='log4j']/version:=1.2.14" \
`find . -name pom.xml`


Det er bare fantasien og hva man får til med XPath som begrenser hva man kan gjøre med denne..

2 kommentarer:

Ramon Arellano sa...

Det var fancy!

I Maven 1.x satte vi i enkelte tilfeller versjonsnummeret som en parameter i en property-fil, og refererte til parameteren i POM'ene.

Kunne man gjort noe tilsvarende i Maven 2?

Asgeir S. Nilsen sa...

I Maven er det mange måter å gjøre dette på.

Den beste måten å håndtere versjonsnumre på dependencies er ved hjelp av dependencyManagement i topp POM til et prosjekt. Dersom denne brukes, angir man ikke version når man angir dependency.

Properties kan også brukes. I Maven 2 kan properties komme fra environment, Java system properties, eller settings.xml i $HOME/.m2 eller Maven installasjonen, samt i <properties> i POM.
Se dokumentasjonen for mer info.