Intellij Idea versus Eclipse – part I
>> 10 reasons why Idea is better
In this part I’m focusing on advantages of Idea over Eclipse. I plan for a 2nd part to check out the other side – advantages when using Eclipse over Idea.
This is not a major feature comparison, but more of a mix of small experiences intended to ease your life as a developer. I’ve spent a lot of time developing server side applications with both IDEs, so I can’t really speak for differences when it comes to J2ME support or other features. I’ve also had my share of experiences with quite a few Eclipse plugins, but I haven’t tried them all (who did?).
I have to mention I’m talking here about Idea 5.x vs Eclipse 3.1. I played only a bit with Idea 6.0 and barely tried Eclipse 3.2.
1. Navigation – Idea is king when it comes to navigating through hierarchies in Java classes. The ability to go to implementation it’s fun and easy to use. Eclipse may have some plugins that do this, but still not as smooth as Idea.
2. Intentions – when adding methods to your interfaces, Idea automatically suggests you to implement that method in all implementing classes. With Eclipse’s default configuration you can’t do that. Not even sure there are plugins offering this feature. This tremendous feature really improves productivity when you build APIs and continually add methods to your interfaces.
3. One package to rule them all – a lot of functionality packed into one single installer: Idea has almost everything you want packed in one single package. The fact that for Eclipse you have to customize your own distribution is a pain in the a**. There are MyEclipse (not free) which may take Eclipse very close to Idea, or EasyEclipse, which is a distribution packed with almost everything you want.
4. Keyboard shortcuts for ant tasks – Idea allows you to assign keyboard shortcuts for ant tasks which increases productivity. For typical web applications I usually have two shortcuts: one for deploying web resources and one for compiling and deploying java classes. Eclipse didn’t pay too much attention to this feature. I know you can assign one shortcut (don’t ask me how – somebody showed me once and it was so complicated I didn’t bother remembering how to do it). And overall, changing keyboard shortcuts in Eclipse is somehow painful than in Idea. I guess this happens because Idea presents that tree (Settings/Keymap) containing Main Menu and Ant tasks amongst others. Eclipse has two tabs: View & Modify. View shows a long list and Modify shows two combo boxes. Guess the tree control is more suitable here.
5. Exclude folders – Idea has made it so simple to specify which resources you want to exclude from your project: like typical build, dist directories. This is useful for many situations. I’ll just name two:
a) you don’t want to see Idea’s “Updating modified files” loading bar every time you do build or dist your project
b) when opening resources such as XML files, you don’t wanna see two or three XML files with the same name and having to carefully choose which one you edit. In Eclipse it would’ve been so much simpler if they would have use the same Idea of excluded directories. I think I managed to do this once, to avoid the problem from point b), but now I can’t even remember how to do it.
6. Autosave – Idea autosaves each file. Don’t bother manually saving, confirming or discarding file changes. At first, I haven’t appreciated much the Idea. I thought: what happens if I don’t want to save what I modified? If all the text editors and IDEs out there need CTRL+S, why change it? I even found myself pressing CTRL+S out of habit. However, in time I got to appreciate this feature, since 1. it doesn’t bother you with all kind of popups asking whether to save your file or not before running the ant task and 2. it turns out I don’t usually need the option of not saving what has been modified. While it’s not a major feature, it does ease your life and save you from more unwanted mouse clicks.
7. Pinning/unpinning tools windows – Unpinning project window, console window, ant console window or ant window in Idea is a great feature. I usually unpin all my windows and have this way all the screen for editing my java files. And since I customized my keyboard shortcuts, I can easily bring up project window in the left side (I use ALT+~), ant window in the right side (I use ALT+\) and any of the lower windows (debug, run, ant console, etc – Idea’s defaults are ALT+0,1,2…). UPDATE: this can be actually configured also in Eclipse by using fast views on utility windows along with shortcuts for displaying/hiding them. When displaying them, they do however show up over the editor and always on the left side. Almost close to how Idea handles it.
8. Find usages vs References in workspace – Idea finds your usages, automatically selects the first usage, nothing wrong. Eclipse can look for references in workspace, find them, but sometimes forgets to select the first usage. If you have a hierarchy of 5-7 packages, then you’ll understand how painful is to have to open each package to get to the first occurence. I admit with latest versions, Eclipse does its job well almost everytime: searches and focuses automatically on the first reference, but I have no Idea why sometimes (rarely) it just doesn’t do it. It’s so frustrating when it happens.
9. Refactoring in non java resources – when I first discovered you can refactor names in an ant build file I was blown away by how natural this feature seemed. AFAIK in Eclipse you can’t do it (perhaps you know how to do it).
10. Export / import preferences – Idea saves every option you may customize – I still haven’t found some customization that Idea did not saved. As for Eclipse, it has a nice Import/Export preferences feature, but somehow they forgot to save code templates. Since I’m used to templates like “sout” (automatically transformed to “System.out.println” by Idea), I usually customize Eclipse adding a new template, which unfortunately doesn’t get saved when exporting your preferences. I like “sout” better than “sysout” since it’s … shorter.
Part 2 will contain 10 reasons for Eclipse.