Search code examples
eclipseeclipse-plugineclipse-rcprcpmultiplatform

Eclipse RCP: build.properties for multiple platforms


I'm developing an Eclipse RCP application. The application should run on Windows and Linux.

There are several plugins in this application that contain native artifacts. To contain these artifacts in a binary build (jar), one should specify them in build.properties file.
Currently I include both Linux and Windows native artifacts in build.properties and then in runtime I choose which one to load. However, I don't like this approach as it causes unnecessary files to present in both Linux and Windows builds.

Is there a way to specify target platform in build.properties? So that for Linux build it would include Linux artifacts and for Windows build it would include Windows artifacts?
Alternatively, is there a way to maintain two copies of build.properties - one for Linux build and second for Windows build?


Solution

  • The usual way to do this is to have separate plugins (or plugin fragments) for each platform with a platform filter which restricts when the plugin is available:

    For example, in the MANIFEST.MF

    Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
    

    restricts the plugin to only Mac OS X 64 bit, Cocoa.

    This is what SWT does. There is a base org.eclipse.swt plugin which doesn't contain any code and then multiple plugin fragments extending that plugin (such as org.eclipse.swt.cocoa.macosx.x86_64). Each fragment contains the SWT code for a platform, all implementing the same classes.

    Eclipse only loads the plugin for the current platform so you don't have to do any work choosing what to use.