Maven does not dictate structure. Maven promotes it!
This is my response a comment on TSS about the structure in Maven projects. We recommend a structure we don't dictate one ...
The directory structure used by a Maven project has never been fixed. There are defaults, yes, but they can all be overridden. I have had many clients over the years that have had existing structures that needed to be preserved for various policy reasons, or projects that had lives spanning many branches into the past where changing the directory structure would have made merging a nightmare. The defaults are easy to change at a project, or organizational level. That the structure is fixed in Maven is a myth.
Many organizations choose to start new projects using the standard structure and/or migrate to the standard where possible as standard Maven documentation, training, and idioms then apply. Maven's defaults were chosen to allow for growth but are, in fact, as arbitrary as the defaults in any other system. The advantage is that our defaults are used by a few hundred thousand people and there are undeniable benefits in a collective understanding of a project structure. I'm not trying to say this alone mitigates any of the implementation defects in Maven (of which no one is more acutely aware then myself) or that a default structure alone is a good reason to use Maven. But it lends itself toward building a level of social capital (a measure of how well groups can work together) because there is some common structure from which to work from and communicate. Maven does not dictate a structure, contrary to popular opinion, but we definitely promote one.
You have used your same Ant build files since 2002 which works for you. If you deliver using this tool set who can argue with that. But I have seen the argument many times over and it goes something like "my structure is pretty simple because I stick to the basics and it does what I need." This is perfectly fine in isolated cases but try to onboard new developers, find resources for your build and release team, attract developers to your open source project, reach a standard in your department, or your organization, integrate with disparate parts of your organization, incorporate third party libraries, integrate open source and you will rapidly find N pivot points against which you must learn something different to make the overall system work. This is simply an untenable proposition for a community of people trying to together efficiently.
Maven has many flaws, but it is very usable by a large number of groups. Maven is also not static. Not many people know that .NET and C toolchains have been created for Maven, or that with a few new implementations of internal components that Maven can build OSGi components directly from manifest information (look Mom, no POM!), or that you can write Maven plugins in Groovy, Ruby, or Ant script. Many of these things are unknown because the Maven project has admittedly been terrible at documenting these attributes and features. This is a failure at the Maven community level that we are trying address.
Ultimately it's your decision as a user. If Maven doesn't work for you don't use it. But Maven was not meant to cater to personal biases, it was meant to work for groups and as such compromises need to be made in order to use Maven effectively. Maven is not for anyone in particular, it was intended for a large number of users who have made a conscious decision to work in more or less in the same way to achieve results in what they are making, not in how they make it.
How did MyEclipse get their Maven Integration So Wrong?
Eugene and I have been watching with amazement how vocal MyEclipse users have been about their great disappointment with Genuitec's attempt at Maven integration, which amounts to complete mutilation of m2eclipse and the way Maven itself works. Genuitec decided to work in their standard fashion, which is unfortunately not a very collaborative mode of operation, and it's apparent that MyEclipse customers are not happy.
MyEclipse Breaks Maven
Maven has a very opinionated way of doing things, there is a very strong structure that is encouraged and users have come to like the convention over configuration approach. I warned Wayne Parrot from Genuitec that changing the way Maven worked by default, or at least the attempt to, would result in unhappy Maven users. None of our documentation would apply, users could not use conventional modes of support like the Maven users lists, or the m2eclipse users lists, and they couldn't benefit from standard books, or the Maven website. I really wasn't very pleased with some of the initial reactions but it was this quote that drove me to write something about the unequivocally abysmal Maven4MyEclipse integration:
I was using maven4myeclipse because I was following a book on maven. Until I reached a chapter on multi-module maven projects, after countless hours and then days trying to get the example chapter to work in maven4myeclipse I went online seeing if anyone else encountered similar problems. Well I've saw on google that someone in the myeclipse forums actually "removed maven4myeclipse" (http://www.myeclipseide.com/PNphpBB2-viewtopic-t-21172-highlight-m2eclipse.html) and instead installed m2eclipse. Curious I followed those same steps and managed to install m2eclipse without any obvious problems.
I was surprised to see that not only did m2eclipse have everything that maven4eclipse had but it seemed much, much, much more capable of doing big multi-module enterprise applications minus the frustration that maven4eclipse gave. Also m2eclipse truly followed the "convention over configuration" philosophy as I could literally drag and drop ANY pom files from any location into a m2eclipse project and have it working immediately. As opposed to maven4myeclipses non-standard propietary project meta information which is very myeclipse centric and non-portable for maven projects.
I'm very disappointed in the maven4myeclipse plugin and I'll recommend to anyone reading this post that if they want a excellent maven plugin for their projects, I would strongly recommend that they uninstall maven4myeclipse and instead install m2eclipse, I'm sure that it'll be compatible with your existing maven projects with a minimum amount of disruption.
So how did did Genuitec get their Maven integration so wrong? I really think it is a lack of foresight in cooperating with a project that has a very strong community and doing pretty poor product planning. They obviously didn't talk to many of their customers about Maven integration as you can see from litany I've collected below. I think the integration of Maven in MyEclipse can be considered a complete flop by MyEclipse users. Hopefully the next time around Genuitec will make an attempt to communicate more with the Open Source community which they are trying to leverage and do a better job of listening to their customers or they are going to be listening a continuation of the litany below.
So what can Maven4MyEclipse users do? Well, I don't have an ideal solution because that's up to Genuitec. As a stop gap for MyEclipse users who want to harness the full power of m2eclipse, they can use the following update site that will disable Maven4MyEclipse and replace it with stock m2eclipse.
http://m2eclipse.sonatype.org/update-maven4youreclipse/
After all, it's your Eclipse and you can have Maven the way you expect and want it. Glad we could help. The rest is a keen lesson in learning to treat your customers like an intelligent community of users who prefer to not have their time wasted.
The Genuitec Maven Integration Litany from MyEclipse Customers
We've assembled some of the feedback from Genuitec's own customers who are frustrated with the problems they are having with Maven4MyEclipse:
Maven projects are not arbitrary. They have a consistent and predictable layout. You have effectively made m2eclipse useless with your M4ME implementation. Because of this I'll most likely not move to newer versions of MyEclipse past 6.0. (source)
I have several hundred maven projects that work just fine with m2eclipse but are useless with Maven4MyEclipse. Hopefully future versions will become compatible but until then i will not upgrade. (source)
Why do we need a custom implementation of m2eclipse? Why do we need custom implementations of anything? I don't mind new features being added to MyEclipse, but if each new version is going to break my existing setup, it begins to become tedius. Especially if there is no easy way to disable a conflicting feature from within the Manage Your Configuration. Creating a new project and copying things into it is simply not an option. (source)
Okay, I have now been able to disable Maven4MyEclipse and have the original m2eclipse working again (on MyEclipse 6.5). (he also provides instructions how to remove Maven support from MyEclipse) (source)
The crux of the issue here is that m2Eclipse is very powerful, very flexible and works with existing projects or new ones. I can take any maven-based project and just use it. Maven4Myecilpse appears only to work for Newbies at the expense of those of us who already have Maven-based projects. So, for people like me, M4ME offers none of the value that M2E does. And as a result I'll probably do what's been recommended above and pry your component out in favor of putting M2E in. (source)
If you read this thread you'll see that's exactly the problem. One of the other posters mentioned 400 maven-based projects. Without being able to add maven support from ME to the project, he can't function within ME 6.5. I think if you can't fix M4ME at least make it so those of use who want to use M2E can turn off M4E. (source)
Like many others here, I find Maven4MyEclipse to be a major step BACKWARDS in functionality from the plain-old m2eclipse plugin.What in the world were you thinking to actually REMOVE from m2eclipse the standard maven project structure? Simply defies all belief! (source)
I am migrating from M2Eclipse to Mave4Eclipse my project works fine with M2Eclipse when i try build using the Mave4Eclipse i am getting this error. (source)
We currently have the Standard edition, so we cannot use maven4myeclipse, and are unable to run m2eclipse after it is installed. This is very disappointing and doesn't seem to be in line with the pluggable / open architecture of eclipse. (source)
I appreciate all the hard work which has been put into the myeclipse maven integration but It is not yet a complete maven solution and has several features which are missing (many of which are already implemented in the m2eclipse plugin). As a paying customer I'd like to get the some of the new features of 6.5 but i cannot because I am forced to stay at 6.0.1 until the myeclipse maven integration catches up to m2eclipse. This doesn't seem like a viable solution. (source)
I'm no great fan of Maven after it biting me severely along the way but it would at least vaguely work with the M2Eclipse plugin. Rolling back from 6.5.1, a fantastic release otherwise where a lot of bugs I was running into were fixed, and having no option to run the freely available working Maven plugin and pay for it just hurtful. (source)
We've bought six Standard edition licenses, but we can't use them while MyEclipse won't work with our existing Maven projects. Is there a download of version 6.01 for OSX available until you have removed Maven4MyEclipse from the Standard edition? (source)
I installed m2eclipse not realizing that MyEclipse 6.5 had a maven plugin. I seem to have had a conflict (both m2eclispe or Maven4MyEclipse preferences pages are getting exceptions) so I disabled the m2eclipse plugin. Even though m2eclipse is disabled, I am still getting a java.lang.NoClassDefFound error from Maven4MyEclipse preference page. I am unsure how to recover at this point -- do I have to reinstall MyEclipse 6.5 and start over? Also, is there a way to disable Maven4MyEclipse? (source)
This is, quite frankly, ridiculous, but you've already heard that over in other threads. (But it's sort of unfathomable how you guys didn't anticipate that this would be a problem -- integrating m2eclipse into MyEclipse in such a way that you removed functionality AND prevented users from restoring that functionality with their own local installs of m2eclipse. Did this really, really never cross the drawing board?!?) (source)
...why stomp on the namespace of the existing m2eclipse plugin? Why didn't you create your functionality in an entirely different namespace, and make it so that users could choose whether to use it at all, and if they chose not to use it they wouldn't have any problem installing m2eclipse right atop MyEclipse 6.5? (source)
this new feature prevents us from using 6.5 with our existing maven projects... which we would like to be able to do as used to. Downgrade ahead of us. (source)
I created a Maven project from scratch at work and checked it in to Subversion. I'm also lucky enough to be able to work from home and have access to that svn repository, and I'm flabergasted that I can't check out that same project and work on it at a different location and have all the same functionality available to me. I can't add Maven support to the project. I can't figure out how to add AspectJ support. It's a total nightmare trying to get this project working on another machine. (source)
If the magnitude of the problem isn't completely clear from this forum thread, just for the benefit of the developer folks, I use Maven 2 for all Java projects developed for my company and others I consult for. When I discovered that the initial Maven 2 support in MyEclipseIDE prevented using existing Maven 2 projects, I had to completely uninstall MyEclipseIDE and am unable to use it at all now. So I'm a version behind, and am stuck there until this Maven support issue is resolved. So if this support issue has been resolved, then please let me know, so I can upgrade. If not, then please understand the magnitude of the problem: I cannot use MyEclipseIDE at all until this is resolved. (source)
Be a good Maven citizen -- Don't scrape the whole damn central repository!
For the last few nights we have had some particularly bad Maven citizens averaging almost 3000 connections in a 10 minute period. This particular abuser emanates from the Netherlands and this is the first time I have completely blocked an IP permanently from the central repository (I'm sure they will just use another one but it's a start). I've started trying to track down who exactly the IP (82.94.207.11) belongs to. I have a pretty good suspicion who it is.
We're happy to work with groups who want to mirror the repository using rsync provided you are using that mirror to service other Maven users. Trying to scape Maven central cripples the primary feeder to all the mirrors and the synchronization with other open source organizations we work with. By opening 3000 connections to central and scraping it you screw every other Maven user on the planet you idiots. Anyone who knows me knows how rabidly tenacious I am and I will track down every IP you have and create blacklist that every Maven mirror and Maven repository manager will just drop connections to. If you make the life of Maven users more difficult then necessary I will find a way to do the same to you.

