How to Create a Desktop Application – A Beginner-Friendly Guide

I’ve been working with Eclipse RCP (Rich Client Platform) to build modular and robust desktop applications. Eclipse RCP provides a modern framework for creating feature-rich desktop apps based on a proven plugin architecture. In this post, I’ll show you — step by step — how to build a basic Eclipse RCP application: from project setup to running your first app.

I’ll cover the key technologies needed, how to integrate Maven (as of mid-2025), and share useful tips based on my own experience — so you can quickly start building your own desktop software.

What is RCP?

An RCP application is a modular desktop application built on top of a framework like Eclipse RCP. It gives you: 

  • A consistent UI framework
  • Built-in support for modularity and plugins
  • Common services (menus, actions, update mechanisms)

Prerequisites

Before starting, you’ll need:

  • Java 21 or greater installed.
  • Eclipse IDE for RCP and RAP Developers 2025-06 or older (download from: Eclipse Downloads).
  • Basic knowledge of Java and Maven.

You can start developing on Windows, macOS, or Linux, as Eclipse RCP is a cross-platform technology.

Step 1: Explaining the Project

You can find the full base application on my github page:  https://nodes-ro.github.io/nodes-rcp-desktop/ 

 

Our project will contain a parent module and four other sub modules.

  • parent-pom
    • nodes_feature
    • nodes_plugin
    • nodes_repository
    • nodes_target
Nodes RCP Application

In this Eclipse RCP project, we use Maven + Tycho to manage the build, versions and packaging the application. This approach gives us a fully automated, reproducible build for the RCP app.

parent-pom

This contains the parent project pom. 

    • pom.xml – Its job is to collect common configuration and to orchestrate the build of the four other sub-modules. It configures Tyco version4.0.13, Java 21. Look inside this file for additional comments about its content.
nodes_feature

This module defines an Eclipse Feature. Groups together one or more plugins (usually your main plugin plus optional dependencies).We use this because Eclipse RCP products are built from features, not plugins directly.

    • pom.xml – packaging is set to eclipse-feature, indicating that this module builds an Eclipse feature rather than a standard JAR or plug-in.
    • features.xml – Contains the nodes_plugin, which delivers the core application functionality. –
nodes_plugin

This is the main plugin. Contains your RCP application code like:  Menus & Commands, Services. You will spend 80% of your coding time here.

It also contains Application.e4xmi which is used to define the structure of your app at runtime (Perspectives, Views, Parts, Menus, Toolbars, Handlers ... ).

    • pom.xml – Declares the module as an eclipse-plugin. That tells Tycho to treat it as an OSGi bundle
    • META-INF/MANIFEST.MF – The bundle’s identity card.

      • Export-Package exposes the handlers and parts packages so other bundles can call into them.

      • Require-Bundle / Import-Package list the dependecies this plug-in must have at compile time and at runtime, ensuring the framework resolves only against compatible versions.

    • model/Application.e4xmi – A declarative, EMF-typed blueprint of the UI. This file tells the Eclipse platform what UI to create and how it is wired together.

    • build.properties – It tells the build system where the Java source folders are and which non-code resources (manifest, XML, icons, splash screen, etc.) have to be packed into the final JAR.

  •  
    • plugin.xml – Registers the RCP product named “Nodes.” It points to model/Application.e4xmi.
  •  
    • icons/, splash.bmp – Folders containing project resources

 

 

nodes_repository

This is where your RCP application gets packaged into a real, installable product, either as a standalone product or as an update site. 

It also contains thenodes.product file — which describes your actual RCP product.(Determines what will be included in the final installable app, configures branding like splash screens, Specifies JVM arguments)

    • pom.xml – Has the configuration to package everything produced by earlier modules into a p2 update site and platform-specific, self-contained “Nodes” applications for Windows, Linux and macOS.
    • nodes.product – This .product file is the shipping manifest for the Eclipse RCP app “Nodes”; it defines native launchers and splash branding, sets a few VM/program args, and specifies which features will be installed into the final p2 repo / product.
nodes_target

This module defines the Target Platform. Describes what version of Eclipse Platform your app runs on and dependencies on Eclipse bundles & external libraries.

  • pom.xml – Packaging is set to eclipse-target-definition
  • nodes.target – This file describes the exact Eclipse & third-party plugins/bundles your workspace and Tycho build must compile against.

Step 2: Set up the Project

Open Eclipse IDE.

Go to Import ProjectsGitProjects from Git(with smart import)GitHubSearch (nodes-rcp-desktop)

Select botacatalin/nodes-rcp-desktop (Java)  repository. 

Click Next → Branch selection main ( leave as it is )

Click Next → Local destination ( leave as it is )

Click Next → Import Projects ( leave as it is ) →Finish

When Discover m2e connectors window pops up click Resolve All Later → Finish

Build the Project
  • In Eclipse Project Explorer, right-click on parent-pom/pom.xml
  • Select: Run AsMaven Build…
    • In the dialog that opens:
      • In the Goals field, type:
         
        clean install
  • Click Run

After you get BUILD SUCCESS go to nodes_repository/target/products/nodes.product/ ...  and select the executable for your platform. This generates a standalone application that you can run directly on your computer.

Why would you use this approach ?

To develop:

  • Internal Tools - Domain-Specific Applications.
  • Proof-of-Concepts & Rapid Prototypes.

 

This article was updated on