POMStrap is a little opensource (BSD License) application bootstrap designed to avoid the Java library dependency/version headache. The more we use open-source Java components, the more we have to deal with the classical problem of dependency conflict.
I've personally experienced this problem when using FOP and Batik simultaneously: FOP required a specific old version of Batik to work (and render vector images), and I needed to use the latest version of Batik for image rendering.
POMStrap allows you clean separation of concern within your application (for component oriented architecture), providing strict hierarchical classloader confinement.
POMStrap is able to load application dependency as they are declared in Maven 2 project file, and execute each dependency in its own classloader without inhering from its parent avoiding version conflict.
By using POMStrap you will be able to have an application dependency schema such as:
And DepB-1.0 executing DepA-2.0 classes (and not DepA-1.0 as it would be without POMStrap).
POMStrap also work as an application bootstrap. POMStrap project just requires a pom file (Maven 2 project file) and a class/method to fetch all required dependencies and launch the application using a command line syntax such as:
java -jar pomstrap-1.0.jar groupId:artifact:version classname[:method] [method args]
java -jar pomstrap-1.0.jar pomstrap:testApp:1.0 com.prefetch.pomstrap.App:run
If no method is provided it will try to start the classical java static main method.
Be default POMStrap looks into you local repository (in you [home directory]/.m2/repository) but you can also specify another repository URL using system property:
You can use POMStrap via a Servlet with similar init-parameters configuration (see provided example sources).
A JBoss POMStrap Service is also available and allows you to lauch applications as JBoss Service (via .sar file deployed in a JBoss instance).
By the way, POMStrap can easily be embedded in your application with minimal impact (since it does not require any external library).
What's New in This Release: [ read full changelog ]
· A minor bug was fixed.
· A synchronization was added in the classloader to avoid loading the same class multiple times (and the related exception).