# 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.

# Note:  Only platform:/base/ and file: URLs are supported.  In general the 
# URLs given may include a version number (e.g., .../location_1.2.3).  
# If a version is not specified, the system binds
# to the location which matches exactly or to the versioned location with the
# latest version number.  If a version number is given then only exact matches
# are considered.

# The URL for the runtime entry point.  The default value is
# platform:/base/plugins/org.eclipse.osgi 
#osgi.framework = platform:/base/plugins/org.eclipse.osgi

# The classpath for the framework found at the osgi.framework location.  This 
# comma-separated list contains either URLs or simple element names.  Simple
# names are assumed to be relative to the framework's install directory.  
# Typically this value need not be set as it is initialized by the framework itself.
# Version match searching is not done for URLs listed here.
#osgi.frameworkClassPath =

# The comma-separated list of locations to search for the splash screen file (splash.bmp).
# For each list element a subdirectory structure based on the pattern nl/<locale> is searched.
# The system binds to the first matching file.  There is no default value.
#osgi.splashPath = platform:/base/plugins/org.eclipse.platform

# The location of the splash screen file.  If this value is set at system startup it is used 
# in favour of the osgi.splashPath searching outlined above.  If the value is not set 
# the searching is done and this key is bound to the result of the search.
#osgi.splashLocation =

# 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.core.runtime@2:start, org.eclipse.core.expressions, org.eclipse.help, \
  org.eclipse.jface,  org.eclipse.osgi.services, org.eclipse.osgi, org.eclipse.swt, org.eclipse.swt.motif, \
  org.eclipse.ui.examples.rcp.browser, org.eclipse.ui.workbench, org.eclipse.ui

# 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.ui.examples.rcp.browser.product

# The application to run.  The value specified here is the id of the application extension
# the runtime will find, instantiate and execute once the system is up.  Note that typically 
# the identified eclipse.product defines the default application to run.
#eclipse.application=

# End of file marker - must be here
eof=eof