I use Maven 2 a lot in projects for quite some years now. Here a some random tips from my previous experiences that I'd like to share.
Some leaky abstractions are sneaky, they are not visible right away. At my current assignment we are thinking about refactoring some co-located Services so only one single Service per machine exists. One way to achieve this is to "remote" the Services using RMI. Since the service is already an interface and configured in an IOC container you would think it is ready to change the underlying implementation; from co-locating to remoting. However I came across some sneaky leaky abstractions that caused the refactoring more time consuming than I expected.
Using descriptive names is a good programming practice. Today I came across an example that does quite the opposite. In Maven 2 you can define a proxy when you are working behind a proxy server, and there is this active flag that sets this proxy to active or inactive.... or at least that is what you expect right?
This is the literal translation of an old dutch saying "Vakmanschap is Meesterschap"; being a master in your profession. In my opinion the lacking of this is one of the biggest problems in software development these days and main reason why projects fail; it isn't a process that caused it, nor the technique that was used: It's actually people that mess up projects! Did the technique or process pick itself or did someone pick the technique or process?
Currently there is also a debate going on whether or not to include Craftsmanship over Execution as fifth value on the Agile Manifesto.
But let's take a step back and try to figure out why we are lacking craftsmanship?
Refactoring is part of a software developers work. General rule of thumb I always used is if you see code that smells (for instance duplication) you should refactor. But does this rule always apply? Are there any situations when you should not refactor? And if so, how do you recognize those situations?
After my first real encounter with Groovy I got really excited about it and decided to spend some of my personal training days to get more experience with Groovy. As study material I read the Programming Groovy book. While reading I really wanted to get my hands dirty, so as a study case I decided to solve one of my longest and biggest frustrations as a developer and that is working behind a proxy server. The idea I had is to create a groovy program that will allow to turn the proxy settings on or off for applications like (Maven, Subversion, Internet Explorer, Firefox and so on) by running a single command: groovy com/xebia/proxy/SwitchProxy on/off. Here is a short summary of some of the techniques I used while creating this program.
When we upgraded WordPress to the newest version, we accidentally enabled mandatory registration for comments. We are sorry for the inconvenience this caused. As of now, registration is again no longer needed to post comments.
For my current assignment I need to write a script that basically does the following: open war file, download and add files from internet, remove files, change xml and property files, re-package war file.
In pure Java, this would be quite some work to implement. Of course there are several libraries available that will make unzipping, downloading etc a bit easier. But still it would be too much effort for such trivial tasks.
Since it is in fact a script I want to create, why not use a scripting language like Groovy. After two days of coding I must say am very happy with the progress I made given the fact that it is actually my first real Groovy programming experience.
Here are some experiences and code I created so far:
One of the most powerful features of Maven is it's reporting mechanism, also known as maven site. There are a lot of reports available which can give you an indication of the quality of your code. However if you overload yourself by adding too many reports or let the reports produce too much information everyone ignores them and the reports become useless.
In this blog I'll share which reports we chose in my current assignment and how you can customize certain Maven Reports to produce the information you want.