Programmers' Pain

Things you shouldn’t do #2: Hack around maven-shade-plugin limitations

Shutter Shades make everyone Look like a Douche ( maven-shade-plugin is a handy plugin which allows you to collect all of your project dependencies - incl. transitive dependencies - and put everything together into a single, shaded jar file. I use this plugin to deliver a Java application as a single jar file containing all needed resources to simplify the application launch descriptor. But sometimes you have more than one Maven project that you want to deliver as a single jar file. And sometimes you even have a parent Maven project that contains a list of dependencies and for each of them you want to create a single jar file. This kind of project setup might lead you to the idea to call the maven-shade-plugin (multiple times) directly from command line to create your jar files which will end up with the follow error message: "You have invoked the goal directly from the command line. This is not supported. Please add the goal to the default lifecycle via an element in your POM and use "mvn package" to have it run.". If you still want to use the plugin and if you're not afraid of bloody hacks than continue reading - otherwise you have to accept this limitation since it's there for a good reason 🙂


Howto install cx-oracle on CentOS 5.x

Python Logo (

Some Python scripts that I've written have to communicate with an Oracle Database. To be able to do so you have to install a Python module that implements the needed Oracle bindings against the Python Database API. Usually those modules aren't part of recent Linux distributions due to license restrictions. Since I haven't really found some easy and straight forward howto or tutorial how to install the cx-oracle Python extension module on CentOS 5.x I decided to write my own little tutorial.


Things you shouldn’t do #1: Recursive Maven Builds

Recursion - You gotta know when to stopToday I've found a new way to kill the resources of my development PC via doing recursive Maven builds. Yes, recursive! Why? Because I can and it's fun! It started with an pretty old part of a Maven build which used Python scripts to compile Java classes outside of the Maven artefact scope. Those classes are than used to launch a little helper JVM which resolves the used annotations of a class you've passed to stdin and prints the annotations class name to stdout. You know, the usual stuff you do in case the used Java decompiler doesn't support Java annotations. It all started with a Maven project which did call a Python script...