Eclipse Target Platform. Via a target platform you define which set of plug-ins and what version of Eclipse you develop against. This tutorial describes how to setup your target platform for Eclipse Plug-in and RCP development.

1. Using a target platform

1.1. Purpose of the target platform

The set of plug-ins available for your application development is defined by the plug-ins in your workspace in addition to the plug-ins defined by your target platform. For example, the SWT and JFace plug-ins are typically provided by your target platform. By default, the plug-in installed in your Eclipse IDE installation are used as target platform.

It is good practice to develop and build against a explicit target definition which is stored in a configuration file. This way the plug-in dependencies and the used versions are controlled and specified during the development. A target definition file is typically shared between the developers to ensure that everyone is using the same basis for development. If such a target definition file does not exists, than every developer develops against his version of the Eclipse IDE, which can lead to incompatible changes.

You can activate and switch the target platform in the Eclipse Preferences. Select Window  Preferences  Plug-in Development  Target Platform. It is also possible to active a target platform via its editor via the Set as Active Target Platform link on the first page.

1.2. Creating a target platform

The creation of a target platform is demonstrated in detail in the exercise.

You can specify your target platform with a target definition file. A target definition file can be created via File  New  Other…​  Plug-in Development  Target Definition.

You can add new locations via the Add…​ button in the Locations section. To add an Eclipse p2 update site, select Software Site and specify the URL.

If you create a target platform, wait until the target platform is completely resolved before setting it as target platform.

All plug-ins you are planning to use in your application and test code must be included in the target definition. For example, if you want to use SWTBot for unit tests, add SWTBot for SWT Testing features from http://download.eclipse.org/technology/swtbot/releases/latest/ to your target platform.

Definition of a target definition file

You can define a target platform based on (p2) update sites and the file system. The Eclipse Maven tooling also add the option to use standard Java libraries from Maven.

The following is a listing of a target platform:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target name="target-platform">
    <locations>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <repository location="http://download.eclipse.org/releases/latest"/>
            <unit id="org.eclipse.equinox.compendium.sdk.feature.group" version="3.20.400.v20201102-2042"/>
            <unit id="org.eclipse.equinox.core.feature.feature.group" version="1.13.0.v20201107-1818"/>
        </location>
    </locations>
</target>

The includeMode property defines how dependencies should be handled:

  • planner = include dependencies

  • slicer don’t include dependencies

2. Exercise: Creating a target platform definition file

In this exercise you create a target definition file. This target definition is used to compile the Eclipse and OSGi components in your workspace.

2.1. Create a project of type general

Create a new project named target-platform of type General via File  New  Other…​  General  Project.

targetdefinitionproject10
targetdefinitionproject20

2.2. Create a target definition file

Create a new target definition file via the File  New  Other…​  Plug-in Development  Target Definition menu path.

Wizard path for target file

Use the target-platform as file name and press the Finish button.

Define target definition file

This creates a new file and opens the Target Definition editor.

2.3. Setting up a target platform for RCP or OSGi development

The following describes the definition of two target platforms. one for Eclipse IDE / RCP development and the other one for OSGi development.

3. Exercise: Setting up a target platform for RCP development

In this exercise you create a target definition which can be used to develop Eclipse plug-ins for the IDE and for RCP applications.

3.1. Add content for RCP development

Press the Add…​ button.

Add content to target definition file

Select Software site in the following dialog.

Add content to target definition file

Press the Next button and enter the following URL in the Work with selection box.

http://download.eclipse.org/releases/latest

Latest points to the latest release, you can also select a specific release to build against.

Remove the Group by Category flag and add the following components:

Table 1. Target components
Component Description

Eclipse Platform SDK

Components for RCP

Equinox Target Components

The native launchers for the platform

Remove Group by

Save the target definition file.

3.2. Example solution for the RCP target platform

If you check the content of the target platform, it should look similar to the following listing.

Show Solution
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target name="target-platform">
 <locations>
  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
   <repository location="http://download.eclipse.org/releases/latest"/>
   <unit id="org.eclipse.equinox.sdk.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.platform.sdk" version="0.0.0"/>
  </location>
 </locations>
</target>

3.3. Add option to use NatTable in your code

NatTable is an advanced framework for building tables and trees. We want to be able to use NatTable in our development environment. Therefore, modify your target platform.

Open the target definition file in the target definition editor and add the following entries.

Table 2. Update sites for the target definition
Name URL

NatTable update site

http://download.eclipse.org/nattable/releases/1.6.0/repository/

vogella sample data model

https://dl.bintray.com/vogellacompany/codeexamples-javadatamodel/updatesite/1.4.0/

The data model is of course not necessary for the usage of Nattable but will give us a simple data model to use NatTable.

The following features of the update sites above should be added to the target definition file.

target platform nattable

Ensure you activate this target definition by clicking on the Set as Target Platform link in the target definition editor.

A target platform file which supports NatTable should therefore have at least the following entries, you may have more entries.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target name="target-platform">
 <locations>
  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
   <repository location="http://download.eclipse.org/releases/latest"/>
   <unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
  </location>
  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
   <repository location="http://download.eclipse.org/nattable/releases/1.6.0/repository/"/>
   <unit id="org.eclipse.nebula.widgets.nattable.core.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.core.source.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.e4.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.e4.source.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.glazedlists.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.glazedlists.source.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.nebula.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.nebula.source.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.poi.feature.feature.group" version="0.0.0"/>
   <unit id="org.eclipse.nebula.widgets.nattable.extension.poi.source.feature.feature.group" version="0.0.0"/>
  </location>
  <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
   <repository location="https://dl.bintray.com/vogellacompany/codeexamples-javadatamodel/updatesite/1.4.0/"/>
   <unit id="com.vogella.model.feature.feature.group" version="0.0.0"/>
   <unit id="com.vogella.model.feature.source.feature.group" version="0.0.0"/>
  </location>
 </locations>
</target>

4. Exercise: Setting up a target platform for OSGi development

In this exercise you create a target definition which can be used to develop OSGi based command line applications.

4.1. Add content for OSGi development

Press the Add…​ button.

Add content to target definition file

Select Software site in the following dialog.

Depending on your installation, you may see different entries in the dialog, e.g. you may see an additional entry named Maven.

Add content to target definition file

Press the Next button and enter the following URL in the Work with selection box.

http://download.eclipse.org/releases/latest

http://download.eclipse.org/releases/latest points to the latest Eclipse release, you can also select a specific release to build against.

Remove the Group by Category flag and add the following components:

Table 3. Target components
Component Description

Equinox Compendium SDK

Additional OSGi services

Equinox Core Function

Basis runtime and functionality of OSGi

Remove Group by

Save the target definition file.

4.2. Example solution for the target platform

If you check the content of the target platform via the Source tab, it should look similar to the following listing.

Please note that the version number has been set to 0.0.0 in the listing, so that

Show Solution
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target name="target-platform">
    <locations>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <repository location="http://download.eclipse.org/releases/latest"/>
            <unit id="org.eclipse.equinox.compendium.sdk.feature.group" version="0.0.0"/>
            <unit id="org.eclipse.equinox.core.feature.feature.group" version="0.0.0"/>
        </location>
    </locations>
</target>

5. Activating the target platform for developemt and issue resolution

5.1. Use the target definition file

After saving the target definition file, it is resolved which will take a while, you can see the progress via the toolbar of your IDE.

Avoid using the Eclipse IDE until the target is resolved. Resolving targets is using the network and you do not want to interrupt this, as this might result in an inconsistent target definition.

After the target is resolved, press the Set as Active Target Platform to activate it. Please note that your version numbers might be different.

tutorial targetdefinition40

5.2. Remove version dependencies

In case you don’t want to fix the version of a bundle in your target platform you can remove the version number. For example if you are using an update site which provides the latest version, you should remove the version number so that your target platform can select the latest version of your plug-ins.

As we are building in this exercise against the latest release of Eclipse we want to remove the version numbers. Therefore, replace all numbers with 0.0.0. 0.0.0 is a placeholder and tells the system to us any available number.

For this, select the Source tab in the target platform editor and replace the numbers with 0.0.0.

This way, you will always use the latest available version from your update site.

5.3. Solving potential issues with your target definition

Your target platform depends on external update sites and the availability of the network. Theses update sites might change over time, so you should be able to revert your target platform settings in case you face issues.

If you face issues with your target platform, switch to the IDE as target platform and afterwards switch back to your target definition.

That sometimes solves target resolution issues.

If the target definition does not work, e.g. because of network issues, you can use your Eclipse IDE as target platform via Window  Preferences  Plug-in Development  Target Platform.

tutorial targetdefinition60

6. Optional exercise: Mirroring p2 update

To avoid long running network operations to server outside of the own network, you can mirror p2 update sites.

One way is to use Eclipse to mirror a update site, for this you need to mirror the metadata and the artifacts.

The following is an example for Windows, which mirrors the latest update site to C:\Users\Lars\mirror.

Mirroring on Windows

[[source, java]

./eclipsec -nosplash -verbose -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication -source https://download.eclipse.org/releases/latest -destination C:\Users\Lars\mirror

./eclipsec -nosplash -verbose -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication -source https://download.eclipse.org/releases/latest -destination C:\Users\Lars\mirror
Mirroring on Linux or Mac

[[source, java]

./eclipse -nosplash -verbose -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication -source https://download.eclipse.org/releases/latest -destination ~/mirror

./eclipse -nosplash -verbose -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication -source https://download.eclipse.org/releases/latest -destination ~/mirror

This mirroring can run very, very long. But it still can be useful to do this, as you could upload the mirrored artifacts on a server in your network. This will make the target definition resolution most likely faster for your developers.

After a successful run, you can change your target platform for the platform features to point to the mirrored p2 update site.

7. Learn more and get support

This tutorial continues on Eclipse RCP online training or Eclipse IDE extensions with lots of video material, additional exercises and much more content.

8. Target platform resources

Copyright © 2012-2019 vogella GmbH. Free use of the software examples is granted under the terms of the Eclipse Public License 2.0. This tutorial is published under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany license.