Jim Akmer wrote:Also if I use an IDE, why would I need to learn a build tool?
There are a number of reasons.
1. While this isn't as big a problem in Java as on other platforms, changes in IDE versions can result in problems building applications down the road. A certain very large offender that I won't name was pushing it to the point where I think now some of my older apps would actually require re-installing an obsolete version of their OS in order to install an obsolete version of their IDE just to make an emergency 1-line code change. The batch builders such as Ant and Maven are less version-sensitive when it comes to backwards compatibility.
2. I worked in a shop where we were supposed to be sharing components. For the most part, we couldn't, because to build the components, you have to have precisely duplicated the IDE setup that the original author used, including his/her departmental standards and services. Which at best, was a major pain to set up, and at worst, conflicted with our own departmental IDE configurations.
3. I've also worked in environments where you submitted only source code for production. The actual binaries were produced elsewhere, thus ensuring both buildability and eliminating any hidden binary "back doors". However, the build process was done in batch on a server machine that had no GUI desktop, and therefore no IDE.
4. Very complex projects often require extra build steps such as rmic, xdoclet and so forth. Trying to setup an IDE to include all this is no trivial task. I generally don't even try, since it's easier to run Maven or Ant.
5. A particular virtue of Maven is that (like it or not), it enforces a standard project structure. Essentially, if you've seen one Maven project, you've seen them all. I don't claim I totally love its standard organization, nor for that matter, a number of other things about Maven. However, I know that if someone dumps a project on me, I won't have to waste time finding where everything is.