About Maven POM Updater

I got tired of updating the versions in the 29 POMs that made up a multi-module project by hand. Even after turning off "Build Automatically" in Eclipse, my IDE took a long time to bring up each file. Once and a while, I'd make a cut-and-paste error stuffing the values in the POM. So, I wrote this Java FX app that's available for use via Web Start through the company I work for (Bekwam, Inc).

This application is distributed with an Apache 2.0 license.


This video shows how Maven POM Updater is used.


To use the app, select a JNLP link.

Screenshot of Maven POM Updater
Main Screen for Maven POM Updater
  1. If running from a Mac, view the Safari downloads and copy the download to the Desktop. Run from there. Navigate to the Security setting page for an additional approval.
  2. When the app starts, select a project root containing POMs.
  3. Optionally, add a filter. Some of the build settings I use move the poms to the target folder, so I've added "target" as a default filter.
  4. Press the Scan button.
  5. Review the table. If the app can't parse a POM, it will flag it in red and skip updating its version or parentVersion.  If the table doesn't look right, look at your POMs and adjust accordingly outside of Maven POM Updater.
  6. Enter a version value.
  7. Press the Update button.  Accept the confirmation. This will update the POM files.

I use SmartGit and after Step #7 see that my working directory has modified POMs.  If I want to rollback the Maven POM Updater changes, I discard to reset the files to head.

If there is an error parsing a POM, the offending POM will be presented in red.  You can then open the Error Log window to view detailed information.

Main Screen Showing POM with Parsing Error
Error Log Window Showing Parse Error (On Mac)


I plan on opening up the private GitHub repository.

This post is on the construction of the Java FX Notification Overlays used in the app.

MPU uses the Delegate Pattern to manage the complexity of its JavaFX Controllers.

The app wires up its objects using the Google Guice dependency injection framework.  Here is a post on how that is set up with JavaFX.

I wrote posts on the cut-and-paste functionality coded in this application.  I started by using some standard String manipulation code but then moved to the JavaFX text manipulation methods (replaceText(), etc) then onto the cut() method where I could.

I added a new feature in 1.2.0 that saves data to the client computer using a technique called "muffins" which is a variation on the standard web "cookies" concept.

Although it's easy to work with the String[] args array passed into a main(), Commons Cli can make handling even a simple command line in JNLP even easier. If you're using Maven, this can be added with almost no effort.

There is no warranty with the app or source code. However, you can enter a ticket in the project's ticketing system by sending an email to mavenpomupdater@bekwam.com.