Over the last couple months, I've received a few emails asking why I prefer IntelliJ IDEA over Eclipse. They usually go something like this:

I keep seeing you recommending IntelliJ. I keep trying it intermittently with using Eclipse, but I feel like I'm missing something obvious that makes so many people think it's better.
Granted having the usual plugins incorporated is nice, but other things like the build process and debugger sometimes seems a step back from Eclipse. Could you please blog a '10 reasons why I love IntelliJ' or point me to something that would clue me in?

I grew to love IntelliJ for a few reasons. It all started in 2006 when I decided to migrate AppFuse from Ant to Maven. Before that, I was a huge Eclipse fan (2002 - 2006). Before Eclipse, I used HomeSite, an HTML Editor to write all my Java code (1999-2002). Eclipse was the first IDE that didn't hog all my system's memory and was pleasant to work with.

The reason I started using IntelliJ in 2006 was because of it's multi-module Maven support. Eclipse's Maven support was terrible, and m2e hasn't gotten a whole lot better in recent years AFAIK.

Back then, I used to think everything should be built and run from the command line. A couple years later, I realized it was better to run tests and debug from an IDE. Now I'm more concerned with the ability to run tests and debug in an IDE than I am from the build system.

In 2009, I started doing a lot more front-end work: writing HTML, CSS and JavaScript. I also started digging into alternate languages for these: Jade, GWT, CoffeeScript, LESS, SASS - even Scala. I found IntelliJ's support, and plugins, to be outstanding for these languages and really enjoyed how it would tell me I had invalid JavaScript, HTML and CSS.

My original passion in software was HTML and JavaScript and I found that hasn't changed in the last 15 years. AFAIK, Eclipse still has terrible web tools support; it excels at Java (and possibly C++ support). Even today, I write most of my HTML code (for InfoQ and this blog) in IntelliJ.

In reality, it probably doesn't matter which IDE you use, as long as you're productive with it. Once you learn one IDE well, the way others do things will likely seem backwards. I'm so familiar with debugging in IntelliJ, that when I tried to use Eclipse's debugger a few weeks ago, it seemed backwards to me.

In a nutshell: the technologies I've worked with have been better embraced by IntelliJ. Has this happened to you? Have certain technologies caused you to use one IDE over another?

Better integration with plugins in general(Maven, DB explorer) , YMMV. With Eclipse 3rd party plugins very often ruin the experience like Oracle enterprise pack validators which slow dramatically the build

snappier and not freezing frequently on large projects.

default configuration of formatter and editor more well tuned (but it is often customized anyway).

UI not flexible enough => for instance I could not manage to maximize the "run" output tab. It is really annoying when you need to search in application debug information.

No Junit test execution history !

More strict on Maven classpath for test (deps of provided scope are ignored). To be honest it is more an issue of not behaving the same as Eclipse (which is default IDE where I work).

At work, i wanted to migrate to Intellij because I found it snappier and having more stable plugins and larger choice (like the ssh client which can be useful). However due to some little differences in behavior with Maven and Junit I did not make the switch because Eclipse is the default IDE used in my company.

I started using IntelliJ after I spent years with Netbeans (at the time I worked at Sun Microsystems). Visual layout editor has been way better in IntelliJ IDEA.

My favorite IntelliJ feature is Database plugin (it is now also available as a separate IDE called 0xDBE), which allows to work with any SQL DB from within IDE with great convenience. It includes SQLite support on Android, which is a unique feature at the moment, if I did not miss some recent improvement in other tools.

One of my favorite aspects of IntelliJ over Eclipse is what I call "code hygiene" - automatic cleanup/fixing of source code (remove trailing spaces, indentation fixes, blank last lines) - all of which is outside of reformatting code.

I have seen a lot of code in our project from Eclipse-based developers that is just plain sloppy in indentation & trailing spaces.

First-class refactoring facilities not available in any other IDE I've tried - you can literally code the whole unit of work in a single method with local variables and then use various shortcuts to split it, pull out class members, etc ... this is extremely useful if you don't want your line of thought interrupted by "what shall I name this field?", "does this need to go in a separate method?", "what does this 3rd party method return?" .. the coding becomes a lot more fluid process.

ALT+ENTER must be the 2 most used keys on my keyboard these days. If there is a problem in your code, this combination solves it 99% of the time.

If you take your time to learn the keyboard shortcuts and configure your own, you may find that the mouse on your desk had got a cob web. And with the mouse out of the game, the productivity goes up ten-fold.

IDEA knows a whole lot more about your project than Eclipse does. This means it can show you problems with your code and configuration to which Eclipse is simply oblivious.

A nice "side-effect" of (4) is that it is also very (very) fast at searching for almost anything in your project

Gorgeous integration with all sorts of frameworks and tools - Spring, Hibernate/JPA, Maven(love the `CTRL+SHIFT+ALT+U`) and others

I finally switched over to IntelliJ when I had to do a project with Grails/Groovy and an intense JavaScript fronted. In neither of the languages and frameworks eclipse was any kind of help. IntelliJ gave you comfort with switching between views and their associated controllers/models, it could give you good support with JavaScript, HTML, CSS and even the Grails GSPs. The biggest disappointment with eclipse was that it even was really bad at groovy support (1 year ago). There is an official Spring plugin for it as well as a preconfigured eclipse version but both struggle with code completion, correct importing and code analysis. IntelliJ outperformed it on all these things pretty easy.

I'm coming back to Java after a few years in the land of .NET. A number
of my .NET programmer friends have commented that what kept them from
exploring further into Java was Eclipse itself. I admittedly had some
amnesia over the pain points of trying to get Eclipse to do things like
remote debugging (correctly and consistently) and working with Maven
projects. Matt suggested IntelliJ, and I was actually able to do what I
needed to do in 10 minutes (versus the day or so of messing around with
Eclipse).

The advantage in productivity that the .NET folks claim (and
I have enough anecdotal evidence to think that it is a credible claim)
stems mainly from the Visual Studio IDE and the way that it provides
enough tools tightly integrated into VS itself. IntelliJ seems to take a
page out of the Microsoft handbook when it comes to the importance being
able to do most everything you need to do from the IDE. I'm relatively
pleased with what I see in IntelliJ, and the price is very reasonable
when you compare it to Microsoft's pricing for VS (which in all fairness
does include an MSDN subscription).

I'm still knocking around with the
community edition of IntelliJ, but if the trial commercial version
really value-adds to the development experience, I'll probably end up
getting a copy. Thanks for the help, Matt!

I do like its maven support, but that's about it. And it's not
even that much ahead of Eclipse - you can similarly well build your run
configurations out of maven goals and have Eclipse run them.

Other than that, I keep getting annoyed:

It's just about three days since
Idea started to have lags of a few seconds once a minute or so, every
once in a while, even if there's plenty of memory and processor cycles
to go around.

I find both its context menus and its keyboard
shortcuts counter-intuitive.

It lacks some basic editing features
which annoy the hell out of me - no jumping through camel-case
identifiers with Ctrl-Left/Right and the search box not keeping its
contents from one search to another, to name the ones that annoyed me
most recently.

whenever you have to step through a long method with
many local vars, you're in for a long wait after each step - until it
gets fresh values for all locals from the debugger (in contrast, Eclipse
only gets the changed ones, and is much faster).

Also, Idea has by far less (useful) plugins than Eclipse has.

To me, Idea seems to be
just a thin wrapper around the various tools developers use, like maven,
git or svn, or the debugger. For such a thin wrapper, it does do a good
job. But I expect more from an IDE.

For people complaining about
instability caused by 3rd party plugins in Eclipse: just pick a distro
which packages everything you need. I usually roll with STS. Comparing
stock Eclipse with Idea is like comparing Linux from scratch with
Windows, and ignoring all the distros.

When I was doing Java I migrated to Idea for similar reasons. I could never get m2e to work properly, and I got fed up with the JSP editing being predictably crap (partly the fault of the templates we were using). Dealing with a number of plugins was hell. Just updating them all took more than 20 minutes. Also, when I reported a bug (in the community edition!) of Idea it was fixed within a week. I've probably still got bug reports open in Eclipse that have never even been looked at. And that's for the ones where I could figure out which module/plugin to report them against. Honestly I don't know why I stuck so long with Eclipse. I guess the debugger is nicer, but not by much.

@Anonymus Coward
That CamelCases are ignored during key navigation is only the standard behavior. If you go to Settings=>Editor=>Smart Keys and check the "Use Camel Humps Words" option you can jump through CamelCases as you wanted to.

hi, dear matt. I am chinese guy? thanks for your appfuse, it's helpful for me to cognizing the archetypes. recently we can't access google in china, , it take a long time for opening appfuse login page with google fonts, how to disable google fonts?thanks

Terry - Bootstrap uses the Google fonts. If you don't want to use them (and your project uses Bootstrap via WebJars), I'd recommend downloading Bootstrap, modifying the CSS accordingly, and changing paths to point to your files instead of the ones from webjars. Hope this helps!

There are two primary paths for OSGi development: (1) The Apache way, and (2) the Eclipse way. Both camps pretty much hate the other as far as I can tell. I'm definitely an OSGi fan for tactical backend development and have given each approach to OSGi a fair evaluation hitherto. The PDE flow makes sense to me and, despite its steep upfront learning curve, I'm considerably more effective at building OSGi systems in that manner than drudging through bnd and pom files. In either case, Eclipse is the way to go for OSGi dev: Bndtools for (1) and PDE for (2). IntelliJ OSGi support, while present, can honestly be assessed as dismal: actually, it would be more proper to say it doesn't support industrial OSGi dev. With that said, programming anything else, viz. HTML/CSS/Javascript or any dynamic language, eclipse can be downright ugly--there's no question that a solid argument can be made there for IntelliJ. As for C++, upgrade to a modern language or respectfully retreat back to C; choice of editor in that case is not your real problem.