Software Development

10 ideas to improve Eclipse IDE usability

Few years ago, we had a mini IDE war inside our office. It happened between Eclipse and Netbeans supporters. Fortunately, we did not have IntelliJ supporter. Each side tried their best to convince people from the other side to use their favourite IDE.

On that war, I am the Eclipse hardcore supporter and I had a hard time fighting Netbeans team. Not as I expected, we end up on the defence side more often than attack. Look at what Netbeans offers, it is quite interesting for me to see how far Netbeans has improved and how Eclipse is getting slower and more difficult to use nowadays than in the past.

 
 
Let I share my experience on that mini war and my point of view on how Eclipse should be improved to keep its competitive edge.

What is the benefit of using Netbeans

For a long time and even up to now, Eclipse is still the dominant IDE in the market. But this did not happened before Eclipse 3.0, which was released in 2004. From there, Eclipse simply dominates the market share of Java IDE for the next decade. Even the C/C++ and Php folks also built their IDE plugin on top of Eclipse.

However, things is getting less rosy now. Eclipse is still good, but not that much better than its competitors any more. IntelliJ is a commercial IDE and we will not compare it to Eclipse in this article. The other and more serious competitor is Netbeans. I myself have tried Netbeans, compared it to Eclipse 3.0 and never came back. But the Netbeans that Eclipse is fighting now and the Netbeans that I have tried are simply too different. It is much faster, more stable, configurable and easier to use than I have known.

The key points of using Netbeans are the usability and first class support from Sun/Oracle for new Java features. It may not be very appealing to Eclipse veteran like myself but for a starter, it is a great advantage. Like any other wars in the technology worlds, Eclipse and Netbeans keep copying each other features for so long that it is very hard to find something that one IDE can do and the other one cannot. To consider the preferred IDE, what really matter is how things are done rather than what can be done.

Regarding usability, I feel Eclipse failed to keep the competitive edge it once had against Netbeans. Eclipse interface is still very flexible and easy to customize but the recent plugins are not so well implemented and error prone (I am thinking of Maven, Git support). Eclipse market is still great but lots of plugins are not so well tested and may create performance or stability issue. Moreover, careless release (Juno 4.0) made Eclipse slow and hangup often. I did not recalled restarting Eclipse in the past but that happened to me once or twice a month now (I am using Eclipse Kepler 4.3).

Plus, Eclipse did not fixed some of the discomforts that I have encountered from early day and I still need to bring along all the favourite plugins to help me ease the pain.

What I expect from Eclipse

There are lots of things I want Eclipse to have but never see from release note. Let share some thoughts:

  1. Warn me before I open a big file rather than hang up

  2. I guess this happen to most of us. My preferred view is the Package Explorer rather than Project Explorer or Navigator but it does not matter. When I search a file by Ctrl + Shift + R or left click on the file in Explorer, Eclipse will just open the file in Editor. If the file is a huge size XML file? Eclipse hangup and show me the content one minute later or I get frustrated and kill the process. Both are bad outcomes.

    warn_open_big_file

  3. Have a single Import/Export configuration endpoint

  4. For who does not know, Eclipse allow you to import/export Eclipse configuration to a file. When I first download a new release of Eclipse, there are few steps that I always do:

    • Import -> Install -> From Existing Installation: This step help me to copy all my favourite features and plugins from old Eclipse to new Eclipse.
    • Modify Xms, Xmx in eclipse.ini
    • Import Formatter (from exported file)
    • Import Shortkey (from exported file)
    • Configure Installed JREs to point to local JDK
    • Configure Server Runtime and create Server.
    • Disable useless Validators
    • Register svn repository
    • And some other minor tasks that I cannot remember now…

    Why don’t make it simpler like Chrome installation when new Eclipse can copy whatever settings that I have done on the old Eclipse?

    chrome_installation

  5. Stop building or refreshing the whole workspace

  6. It happened to me and some of the folks here that I have hundred projects in my workspace. The common practice in our workplace is workspace per repository. To manage things, we create more than 10 Working Sets and constantly switch among them when moving to new task.

    For us, having Eclipse building, refreshing, scanning the whole workspace is so painful that whether we keep closing projects or sometimes, create a smaller workspace. But can Eclipse allow me to configure scanning Working Set rather than Workspace? Working Set is all what I care.

    Plus, sometimes, Ctrl + Shift + R and Ctrl + Shift + T does not reflect my active Working Set and not many people notice the small arrow on the top right of the dialogue to select this.

    active_working_set

  7. Stop indexing by Git and Maven repository by default

  8. Eclipse is nice, it helps us to index Maven and Git repository so that we can work faster later. But not all the time I open Eclipse to work with Maven or Git. Can these plugins be less resource consuming and let me trigger the indexing process when I want?

  9. Give me process id for any server or application that I have launched

  10. This must be a very simple task but I do not know why Eclipse don’t do it. It is even more helpful if Eclipse can provide the memory usage of each process and Eclipse itself. I would like to have a new views that tracking all running process (similar to Debug View) but with process id and memory usage.

  11. Implement Open File Explorer and Console here

  12. I bet that most of us use console often when we do coding, whether for Vi, Maven or Git command. However, Eclipse does not give us this feature and we need to install additional plugin to get it.

    open_extern

  13. Improve the Editor 

  14. I often install AnyEdit plugin because it offer many important features that I found hard to live without like converting, sorting,…

    These features are so crucial that they should be packaged together with Eclipse distribution rather than in a plugin.

    any_edit

  15. Stop showing nonsense warning and suggestion

  16. Have any of you build a project without a single yellow colour warning? I did that in the past, but let often now.

    For example, Eclipse asked me to introduce serialVersionUID because my Exception implements Serializable interface. But seriously, how many Java classes implement Serializable? Do we need to do this for every of them?

  17. Provide me short keys for the re-factoring tools that I always use

  18. Some folks like to type and seeing IDE dependent as a sin. I am on the opposite side. Whatever things can be done by IDE should be done by IDE. Developer is there to think rather than type. It means that I use lots of Eclipse short-keys and re-factoring tool like:

    • Right click -> Surround With
    • Right click -> Refactor
    • Right click -> Source

    Some of most common short keys I use everyday are Ctrl + O, Alt + Shift + L, Alt + Shift + M, Ctrl + Shift + F,… and I would like to have more. Eclipse allows me to define my own short keys but I would like it to be part of Eclipse distribution so that I can use them on other boxes as well.

    From my personal experience, some tools that worth having a short key are:

    • Generate Getters and Setters
    • Generate Constructor using Fields
    • Generate toString()
    • Extract Interface

    I also want Eclipse to be more aggressive in defining Templates for Java Editor. Most of use are familiar with well-known Template like sysout, syserr, switch, why don’t we have more for log, toString(), hashCode(), while true,…

  19. Make the error messages easier to read by beginner

  20. I have answered many Eclipse questions regarding some common errors because developers cannot figure out what the error message means. Let give few examples:

    A developer uses command “mvn eclipse:eclipse”. This command generates project classpath file and effectively disable Workspace Resolution. Later, he want to fix things by Update Project Configuration and encounter an error like below (if you want to understand this further, can take a look at the last part of my Maven series)

    maven_update

    Who understand that? The real problem is the m2e plugin fail to recognize some entries populated by Maven and the solution is to delete all Eclipse files and import Maven project again.

    Another well-known issue is the error message on pom editor due to m2e does not recognize Maven plugin. It is very confusing for newbie to see this kind of errors.

Conclusion

These are my thoughts and I wish Eclipse will grant my wishes some days. Do you have anything to share with us about how you want Eclipse to improve?

Reference: 10 ideas to improve Eclipse IDE usability from our JCG partner Tony Nguyen at the Developers Corner blog.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

19 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Marcel
10 years ago
Mark B
Mark B
10 years ago

Some of your complaints are related to plug-ins not Eclipse. That is why I hate maven and have never used it since I tried it once. It kept making Eclipse slow because it was always checking things all the time.

Mickael Istria
10 years ago

Hi, that’s interesting feedback, but just dropping this kind of ideas like this in a blog is just a bottle in the sea. If you really want Eclipse to improve, you have to open bugs so it is reported in a visible way to the Eclipse contributors community.
http://bugs.eclipse.org

Eclipse/Maven integration has much improved lately, and is part of Eclipse. Luna will be released in 3 weeks. I suggest you give it a new try when it’s available. Or you can already try milestones at https://www.eclipse.org/downloads/index-developer.php

Tony Nguyen
10 years ago
Reply to  Mickael Istria

@Mickael: Nice suggestion, I just gave it a try.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=436131

Yannick Majoros
Yannick Majoros
10 years ago

B this is one of the reason why I hate Eclipse: it doesn’t get Maven right, tying to copy a project’s configuration to a non-standard, eclipse-specific one via obscure plugins. That’s what’s slow, not maven. Other IDEs just use the damn maven/ant/gradle configuration natively, and use those tools to build instead of having to “synchronize” all the time.

Mickael Istria
10 years ago

@: I think you’re wrong. All IDEs have there internal model for project description. Eclipse has .project and family files, other IDEs that don’t have those files have in-memory models, that are non-standard, IDE-specific and obscure. The translation from an external model to the internal (be it in memory or filesystem) one is more or less the same for all IDEs. And the synchronization has to happen as well (for example if you change the Java version in your pom.xml, any IDE has to re-read it and update the target Java version of the project, that’s a synchronization). However, the… Read more »

Tony Nguyen
10 years ago
Reply to  Mickael Istria

@Mickael: I need to disagree with you on this as internal model of Eclipse does not fully compatible with Maven. As I specified in another article about Maven, Eclipse does not support main source and test source. It also does not support dependency scope.

Here is the source: http://sgdev-blog.blogspot.sg/2014/04/maven-explanation-part-3.html

Yannick Majoros
Yannick Majoros
10 years ago
Reply to  Mickael Istria

Having a plugin generate a .project file that is the only configuration read by Eclipse can’t be good. I does get unsynchronized all the time. It doesn’t reflect a big deal of configuration (plugins, …) that can be put in the pom. Other IDEs have in-memory structures from projects, that’s right. But they try to understand as few as possible, leaving most tasks to maven itself instead of trying to understand and mimic it. In practise, working with big maven projects in Eclipse is a nightmare, waiting for it to constantly rebuild the whole thing while blocking the UI, to… Read more »

Tony Nguyen
10 years ago

Eclipse is getting worse but not that totally useless. Let take example, If I have 2 Maven projects: myApp-core and myApp-web, where myApp-web depend on myApp-core.

With workspace resolution, Eclipse includes myApp-core into classpath of myApp-web project. Therefore, all my latest code changes are visible. NetBean doesn’t do this and I need to run maven any time I want to see the latest API. Moreover, workspace resolution allows me to do quick refactoring over multiple related projects.

This is a very real use case which we need to deal with every day.

Yannick Majoros
Yannick Majoros
10 years ago
Reply to  Tony Nguyen

Yes, it does, I do it all the time. You can refactor something that’s used by multiple projects, you’ll see it immediately. And it does it right, respecting scopes, which Eclipse doesn’t.

Seriously, it’s about time to fix it (good luck) or throw the project away.

Meo
Meo
10 years ago

IntelliJ Community Edition is free to use for everything, so I do not see a reason why you would not compare it and spread disinformation about it being a commercial IDE.

Tony Nguyen
10 years ago
Reply to  Meo

@Meo: My last time trying IntelliJ was 10 years ago but we have few development teams in Ukraine with around 50 developers using IntelliJ. So far, none of them is using Community version because they need supports for Application Servers, GWT, Play framework.

When some developers came to Singapore for a short trip, we gave them the box with IntelliJ community version but soon, they upgraded to Ultimate version with 1 month trial. I think community version is good enough for simple project but we still need the Ultimate version four our development

Tarek
Tarek
10 years ago

Hey,

About issue #9, there’s a way to access tools like “Generate Getters and Setters”, “Generate Constructor using Fields”, “Generate toString()” and “Extract Interface” faster:

Hit Ctrl+3. It will open the “Quick Access” window, from where you can type the initials of the tool you want, to filter results with similar initials. At first they won’t correspond to the first choice in the list, but once you start using them frequently, they’ll move to the top.

For instance:
– “gg” ([G]enerate [G]etters and Setters);
– “gc” ([G]enerate [C]onstructor Using Fields);
– “gt” ([G]enerate [t]oString())
– “ei” ([E]xtract [I]nterface)

Jarda
Jarda
9 years ago

– Generate Getters and Setters
– Generate Constructor using Fields
– Generate toString()

y u no lombok? :)
http://projectlombok.org/

Serhiy Brytskyy
Serhiy Brytskyy
5 years ago
Reply to  Jarda

Another good option is Google AutoValue

Tony
9 years ago

Lombok is cool. Coincidentally, I read your comment while inside a Lombok demo. We are going to use Lombok from this month. Still, I think Lombok is created to fix a problem that IDEs and Java never try to solve.

Look at Spring Boot, Spring Data JPA and Lombok, it is quite interesting that most of the recent technologies all aim to reduce the amount of code that we need to type.

Jarda
Jarda
9 years ago
Reply to  Tony

BTW there are some limitations to how well does Eclipse cope with Lombok generating fields under its hands. Namely, if I remember it right, it was the lazy getter annotation what got Eclipse confused.
Still I hate coding without Lombok.

Serhiy Brytskyy
Serhiy Brytskyy
5 years ago

I would like to add my few coins:

– poor project structure, no clear distinguish between source code and tests
– bad maven support

Back to top button