Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I update a property in a Maven POM?

I have two top-level Maven projects, backend and frontend, that advance versions at their own individual pace. Since each has multiple modules, I define my dependency versions in dependencyManagement sections in the parent/aggregate POMs and use a property for the version number.

I want to cleanly update the property with the version number on frontend, preferably arbitrarily, but I can live with requiring a live upstream version to match. I've tried using versions:update-property, but that goal seems to be completely non-functional; regardless of whether there's actually a matching upstream version, I get this debug output:

$ mvn versions:update-property -Dproperty=frontend.version -DnewVersion=0.13.2  -DautoLinkItems=false -X ... [DEBUG] Searching for properties associated with builders [DEBUG] Property ${frontend.version} [DEBUG] Property ${frontend.version}: Looks like this property is not associated with any dependency... [DEBUG] Property ${frontend.version}: Set of valid available versions is [0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.10.0, 0.10.1, 0.11.0, 0.12.0, 0.13.0, 0.13.1, 0.13.2, 0.13.3] [DEBUG] Property ${frontend.version}: Restricting results to 0.13.2 [DEBUG] Property ${frontend.version}: Current winner is: null [DEBUG] Property ${frontend.version}: Searching reactor for a valid version... [DEBUG] Property ${frontend.version}: Set of valid available versions from the reactor is [] [INFO] Property ${frontend.version}: Leaving unchanged as 0.13.1 [INFO] ------------------------------------------------------------------------ 

I've specified -DautoLinkItems=false, and this appears to have no effect; versions-maven-plugin still scans all of my POMs for matching dependencies, throws up its hands, and quits. I've also tried setting searchReactor to false for that property in the plugin configuration. It appears that the plugin (1) incorrectly scans the dependencies even when I've explicitly said to ignore them and (2) even filters out an explicit specific match.

Is there a simple way to rewrite a Maven property entry to a specific value, either forcing versions-maven-plugin to do what I say without validating for a version number or by using another goal? I'd prefer to avoid a tool like sed that doesn't understand XML (as I've seen recommended in a similar question), but I would be okay with a simple XPath manipulation.

like image 724
chrylis -cautiouslyoptimistic- Avatar asked Jul 30 '14 10:07

chrylis -cautiouslyoptimistic-


People also ask

How do you use properties in POM?

Properties are the last required piece to understand POM basics. Maven properties are value placeholders, like properties in Ant. Their values are accessible anywhere within a POM by using the notation ${X}, where X is the property.

How do I access property in POM XML?

In maven pom. xml , a property is accessed by using ${property_name} . You can define your custom properties in Maven.


1 Answers

Is there a simple way to rewrite a Maven property entry to a specific value

Since version 2.5 we can use set-property (documentation):

mvn versions:set-property -Dproperty=your.property -DnewVersion=arbitrary_value

As documented, the set-property goal does not perform any 'sanity checks' on the value you specify, so it should always work, but you should use with care.

like image 99
George Aristy Avatar answered Sep 28 '22 05:09

George Aristy