# Eclipse runtime configuration file
# This file contains a number of key/value pairs that are merged into the 
# System properties on system startup.  The values control the way the 
# runtime is structured and runs.

# The comma-separated list of bundles which are automatically installed and optionally started
# once the system is up and running.  Each entry if of the form
#     <URL | simple bundle location>[@ [<startlevel>] [":start"]]
# If the startlevel is omitted then the framework will use the default start level for the bundle.
# If the "start" tag is added then the bundle will be marked as started after being installed.
# Simple bundle locations are interepreted as relative to the framework's parent directory.
# The startlevel indicates the OSGi start level at which the bundle should run.
# If this value is not set, the system computes an appropriate default.
osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start, org.eclipse.core.runtime@start, org.eclipse.equinox.log@4:start, org.eclipse.ecf.provider.jslp@4:start, org.eclipse.ecf.provider.jmdns@4:start

# The product to run.  A given Eclipse configuration may contain many products.
# The product identified will supply the branding (window icons, title bar text) etc 
# as well as define the default application to run.  
eclipse.product=org.eclipse.sdk.ide
# The default workspace location
osgi.instance.area.default=@user.home/workspace

# entry required for gtk configurations of eclipse to enable stand-alone help
osgi.ws=gtk

# End of file marker - must be here
eof=eof
