title: How to modularize a (large) Java App?
body: <p>I have a rather large (several MLOC) application at hand that I'd like to split up into more maintainable separate parts. Currently the product is comprised of about 40 Eclipse projects, many of them having inter-dependencies. This alone makes a continuous build system unfeasible, because it would have to rebuild very much with each checkin. </p>
  
  <p>Is there a "best practice" way of how to</p>
  
  <ul>
  <li>identify parts that can immediately be separated</li>
  <li>document inter-dependencies visually</li>
  <li>untangle the existing code</li>
  <li>handle "patches" we need to apply to libraries (currently handled by putting them in the classpath before the actual library)</li>
  </ul>
  
  <p>If there are (free/open) tools to support this, I'd appreciate pointers.</p>
  
  <p>Even though I do not have any experience with Maven it seems like it forces a very modular design. I wonder now whether this is something that can be retrofitted iteratively or if a project that was to use it would have to be layouted with modularity in mind right from the start.</p>
  
  <p><strong>Edit 2009-07-10</strong></p>
  
  <p>We are in the process of splitting out some core modules using <a href="http://ant.apache.org/ivy" rel="noreferrer">Apache Ant/Ivy</a>. Really helpful and well designed tool, not imposing as much on you as maven does. </p>
  
  <p>I wrote down some more general details and personal opinion about why we are doing that on my blog - too long to post here and maybe not interesting to everyone, so follow at your own discretion: <a href="http://www.danielschneller.com/2009/07/modularizing-software-with-antivy-and.html" rel="noreferrer">www.danielschneller.com</a></p>