# 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.gtk, \
  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