<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="en">

<head>

<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2014. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >

<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
<title>Eclipse runtime options</title>
</head>

<body>

<h1>The Eclipse runtime options</h1>
<p>Version 4.6 - Last revised September 29, 2015</p>
<p>The Eclipse platform is highly configurable. Configuration input takes the
  form of command line arguments and System property settings. In many cases
  the command line arguments are simply short cuts for setting the related System
  properties. In fact, there are many more System property settings than command
line arguments. </p>
<h2><a name="commandline"></a>Command line arguments </h2>
<p>Listed below are the command line arguments processed by various parts of
  the Eclipse runtime. Many of these values can also be specified using System
  properties either on the command line using -D VM arguments, by specifying
  their values in a config.ini file or by using a &lt;launcher&gt;.ini file.
  Using the two latter techniques it is possible to customize your Eclipse without
  using command line arguments at all.</p>
<p>For each argument in the list, its corresponding System property key is given
  (in {}). Also given is the Eclipse runtime layer in which the command line
  argument is processed (in ()). This is useful for people replacing parts of
  the runtime to suit special needs.</p>
<dl>
  <dt>-application &lt;id&gt; (Runtime)</dt>
  <dd>equivalent to setting  <a href="#eclipseapplication">eclipse.application</a>
    to &lt;id&gt;</dd>
  <dt>-arch &lt;architecture&gt; (OSGi) </dt>
  <dd>equivalent to setting <a href="#osgiarch">osgi.arch</a> to &lt;architecture&gt;</dd>
  <dt>-clean (OSGi) </dt>
  <dd>equivalent to setting <a href="#osgiclean">osgi.clean</a> to &quot;true&quot;</dd>
  <dt>-clearPersistedState (E4)</dt>
  <dd>Removes any cached state of the user interface and reloads the model</dd>
  <dt>-configuration &lt;location&gt;   (Main)</dt>
  <dd>equivalent to setting <a href="#osgiconfigurationarea">osgi.configuration.area</a>
    to &lt;location&gt;</dd>
  <dt>-console [[host:]port] (OSGi) </dt>
  <dd>equivalent to setting <a href="#osgiconsole">osgi.console</a> to [[host:]port].</dd>
  <dt>-consoleLog (Runtime)</dt>
  <dd>equivalent to setting <a href="#eclipseconsolelog">eclipse.consoleLog</a> to
    &quot;true&quot;</dd>
  <dt>-data &lt;location&gt;    (OSGi)<br>
  </dt>
  <dd>equivalent to setting <a href="#osgiinstancearea">osgi.instance.area</a>
    to &lt;location&gt;</dd>
  <dt>-debug [options file] (OSGi)</dt>
  <dd> equivalent to setting <a href="#osgidebug">osgi.debug</a> to [options
    file] or the empty string to simply enable debug (i.e., if the options file
    location is not specified)</dd>
  <dt>-dev [entries] (OSGi)</dt>
  <dd>equivalent to setting <a href="#osgidev">osgi.dev</a> to [entries] or
    the empty string to simply enable dev mode (i.e., if entries are not specified)</dd>
  <dt><a name="eclipsekeyring"></a>-eclipse.keyring &lt;file path&gt;    (Equinox)</dt>
  <dd>Set to override the location of the default secure storage.
    If specified, this parameter takes precedence over setting the
    <a href="#env.eclipsekeyring"><code>ECLIPSE_KEYRING</code></a> environment variable.</dd>
  <dt>-eclipse.password &lt;file path&gt;    (Equinox)</dt>
  <dd>If specified, the secure storage treats contents of the file as a default password.
    When not set, password providers are used to obtain a password.</dd>
  <dt>-feature &lt;feature id&gt;    (Runtime)</dt>
  <dd>equivalent to setting  <a href="#eclipseproduct">eclipse.product</a>
    to &lt;feature id&gt;</dd>
  <dt>-framework &lt;location&gt; (Main) </dt>
  <dd>equivalent to setting  <a href="#o.pngramework">osgi.framework</a> to
    &lt;location&gt;</dd>
  <dt>-initialize (Main)</dt>
  <dd>initializes the configuration being run. All runtime related data structures
    and caches are refreshed. Any user/plug-in defined configuration data is
    not purged. No application is run, any product specifications are ignored
    and no UI is presented (e.g., the splash screen is not drawn)</dd>
  <dt>-install &lt;location&gt; (Main)</dt>
  <dd>equivalent to setting  <a href="#osgiinstallarea">osgi.install.area</a> to
    &lt;location&gt;</dd>
  <dt><a name="launcherdefaultaction" id="launcherdefaultaction"></a>--launcher.defaultAction &lt;option&gt; (Executable)</dt>
  <dd>specifies the default action to take when the launcher is started without
  any &quot;-&quot; arguments on the command line.  Currently the only supported
  value is &quot;openFile&quot;.  The &quot;openFile&quot; option tells the
  launcher that if it is called with a command line that only contains arguments
  that do not start with &quot;-&quot;, then those arguments should be treated as if they
  followed &quot;--launcher.openFile&quot;.
  <pre>  eclipse myFile.txt</pre>
  This is the kind of command line the launcher will receive on windows when you double click a
  file that is associated with eclipse, or you select and choose &quot;Open With&quot; or
  &quot;Send To&quot; Eclipse.
  </dd>

  <dt><a name="launcheropenfile" id="launcheropenfile"></a>--launcher.openFile &lt;space separated list of files&gt; (Executable)</dt>
  <dd>a space separated list of files to pass to the application.  This option is
  typically used to pass a list of files to be opened by an Eclipse application.
  This option requires SWT in order to fire the necessary SWT_OPENDOC event for
  the files that are specified.  Relative paths will be resolved first against the current
  working directory, and second against the eclipse program directory.</dd>
  <dt>--launcher.library &lt;location&gt; (Executable)</dt>
  <dd>the location of the eclipse executable's companion shared
library.&nbsp; If not specified the executable looks in the plugins
directory for the appropriate org.eclipse.equinox.launcher.[platform]
fragment with the highest version and uses the shared library named
eclipse_* inside.</dd>
  <dt>--launcher.ini &lt;location&gt; (Executable)</dt>
  <dd>the location of the product .ini file to use.&nbsp; If not
specified the executable will look for a file beside the launcher with
the same name and the extension .ini.&nbsp; (i.e. eclipse.exe looks for
eclipse.ini, product.exe looks for product.ini)</dd>
  <dt>--launcher.suppressErrors (Executable)</dt>
  <dd>If specified the executable will not display any error or message
dialogs.&nbsp; This is useful if the executable is being used in an
unattended situation.</dd>
  <dt>--launcher.secondThread (Executable)&nbsp; <span
 style="font-style: italic;">MACOSX ONLY</span></dt>
  <dd>If specified the executable will create the Java VM on a
secondary thread.&nbsp; This should used if a swing application is
being run. <span style="font-weight: bold;">SWT will NOT work</span>
if this option is specified.</dd>
  <dt><a name="launchertimeout" id="launchertimeout"></a>--launcher.timeout &lt;value&gt; (Executable)</dt>
  <dd>a timeout value for how long the launcher should spend trying to
  communicate with an already running eclipse before the launcher gives up and
  launches a new eclipse instance. Default is 60 (seconds).
  </dd>
  <dt>--launcher.XXMaxPermSize &lt;value&gt; (Executable)</dt>
  <dd>If specified, and the executable detects that the VM being used
is a Sun VM, then the launcher will automatically add the
-XX:MaxPermSize=&lt;value&gt; vm argument.&nbsp; The executable is not
capable of detecting Sun VMs on all platforms.<br>
  </dd>
  <dt>--launcher.appendVmargs (Executable)</dt>
  <dd>If specified, any VM arguments on the commandline will be appended
  to any VM arguments specified in the launcher .ini file.
  <span style="font-weight: bold;">Using this option is recommended</span>
  in every launcher .ini file that specifies VM arguments, because the
  default behavior of overriding VM arguments can have unexpected side-effects.</dd>
  <dt>--launcher.overrideVmargs (Executable)</dt>
  <dd>If specified on the commandline, overrides the effect of
  --launcher.appendVmargs in a launcher .ini file such that none
  of the VM arguments in the .ini file are considered as soon as
  a -vmargs option is detected on the commandline.</dd>
  <dt>--launcher.GTK_version &lt;value&gt; (Executable)&nbsp; <span style="font-style: italic;">Linux ONLY</span></dt>
  <dd>specifies which version of GTK+ will be used by Eclipse on Linux. The currently acceptable values
  are "2" for GTK+ 2.x and "3" for GTK+ 3.x. If specified, this parameter takes precedence over setting
  the <code>SWT_GTK3</code> environment variable.</dd>
  <dt>-name &lt;string&gt;</dt>
  <dd>The name to be displayed in the task bar item for the splash screen when the application starts up (not applicable on Windows).
  Also used as the title of error dialogs opened by the launcher.  When not set, the name is the name of the executable.</dd>
  <dt>-nl &lt;locale&gt; (OSGi)</dt>
  <dd>equivalent to setting <a href="#osginl">osgi.nl</a> to &lt;locale&gt;</dd>
  <dt>-nlExtensions &lt;nlExtensions&gt; (OSGi)</dt>
  <dd>indicates NL extensions and is equivalent to setting
    <a href="#osginlextensions">osgi.nl.extensions</a> to &lt;nlExtensions&gt;</dd>
  <dt>-noExit (OSGi)</dt>
  <dd>equivalent to setting <a href="#osginoshutdown">osgi.noShutdown</a> to &quot;true&quot;</dd>
  <dt>-noLazyRegistryCacheLoading (Runtime) </dt>
  <dd>equivalent to setting <a href="#eclipsenolazyregistrycacheloading">eclipse.noLazyRegistryCacheLoading</a>
    to &quot;true&quot;</dd>
  <dt>-noRegistryCache
    (Runtime) </dt>
  <dd>equivalent to setting  <a href="#eclipsenoregistrycache">eclipse.noRegistryCache</a>
  to &quot;true&quot;</dd>
  <dt>-noSplash (Executable, Main)</dt>
  <dd>controls whether or not the splash screen is shown</dd>
  <dt>-os &lt;operating system&gt; (OSGi) </dt>
  <dd>equivalent to setting  <a href="#osgios">osgi.os</a> to &lt;operating system&gt;</dd>
  <dt> -pluginCustomization &lt;location&gt; (Runtime) </dt>
  <dd>equivalent to setting <a href="#eclipseplugincustomization">eclipse.pluginCustomization</a> to
  &lt;location&gt;</dd>
  <dt> -product &lt;id&gt; (OSGi) </dt>
  <dd>equivalent to setting  <a href="#eclipseproduct">eclipse.product</a> to
  &lt;id&gt;</dd>
  <dt>-protect [root, master] (Executable, Main) </dt>
  <dd>setting the value to "root" prevents Eclipse from being started
  as a root user, either directly or via programs that run with administrative privileges like 'sudo'.
  This option is currently implemented only on Linux/UNIX based platforms. "master" can be used to
  prevent starting of the master instance in a shared install configuration. This option can be used
  on all platforms supported by Eclipse.</dd>
  <dt> -registryMultiLanguage  (Runtime) </dt>
  <dd>equivalent to setting <a href="#registrymultilang">eclipse.registry.MultiLanguage</a> to
  &quot;true&quot;</dd>
  <dt>-showSplash &lt;bitmap&gt; (Executable, Main)
  </dt>
  <dd>specifies the bitmap to use in the splash screen. If specified,
the launcher may be able to show the splash screen before starting the
Java VM.&nbsp; If not specified, Main will find the bitmap using the
osgi.splashLocation and osgi.splashPath properties.<br>
  </dd>
  <dt>-startup &lt;location&gt; (Executable)</dt>
  <dd>The location of jar used to startup eclipse. The jar referred to
should have the Main-Class attribute set to
org.eclipse.equinox.launcher.Main. If this parameter is not set, the
executable will look in the plugins directory for
theorg.eclipse.equinox.launcher bundle with the highest version.<br>
  </dd>
  <dt>-user &lt;location&gt; (OSGi) </dt>
  <dd>equivalent to setting <a href="#osgiuserarea">osgi.user.area</a> to &lt;location&gt;</dd>
  <dt>-vm &lt;path to java vm&gt; (Executable, Main) </dt>
  <dd>when passed to the Eclipse executable, this option is used to
locate the Java VM to use to run Eclipse. It should be the full file
system path to an appropriate: Java jre/bin directory, Java Executable,
Java shared library (jvm.dll or libjvm.so), or a Java VM Execution
Environment description file.&nbsp; If not specified,
the Eclipse executable uses a search algorithm to locate a suitable VM.
In any event, the executable then passes the path to the actual VM used
to Java Main using the -vm argument. Java Main then stores this value
in <a href="#eclipsevm">eclipse.vm</a>.</dd>
  <dt>-vmargs [vmargs*] (Executable,
    Main) </dt>
  <dd>when passed to the Eclipse, this option is used to customize the operation
    of the Java VM to use to run Eclipse. If
    specified, this option must come at the end of the command line. Even if
    not specified on the executable command line, the executable will automatically
    add the relevant arguments (including the class being launched) to the command
    line passed into Java using the -vmargs argument.
    Java Main then stores this value in <a href="#eclipsevmargs">eclipse.vmargs</a>.</dd>
  <dt>-ws &lt;window system&gt; (OSGi) </dt>
  <dd>equivalent to setting  <a href="#osgiws">osgi.ws</a> to &lt;window system&gt;</dd>
</dl>
<h3>Bidirectional Support</h3>
<dl>
  <dt>-dir &lt;dir&gt;</dt>
  <dd>indicates the orientation of the workbench and is equivalent to setting
    <a href="#eclipseorientation">eclipse.orientation</a> to &lt;dir&gt;.</dd>
  <dt>-bidi &lt;value&gt;</dt>
  <dd>Indicates the default base text direction and whether special bidi processing
    should be enabled.</dd>
  <dd>Valid arguments are <b>&quot;on=[y|n];textDir=[ltr|rtl|auto]&quot;,</b>.</dd>
  <dd>Example: <b>-bidi &quot;on=y;textDir=rtl&quot;</b></dd>
 </dl>
<h3>Obsolete command line arguments </h3>
<p>The following command line arguments are no longer relevant or have been superseded
  and are consumed by the runtime and not passed on to the application being
  run to maintain backward compatibility. .</p>
<dl>
  <dt> -boot</dt>
  <dd>see -configuration</dd>
  <dt>-classLoaderProperties</dt>
  <dd>no longer relevant</dd>
  <dt>-endSplash &lt;command&gt; <br>
  </dt>
  <dd>no longer relevant<br>
  </dd>
  <dt>-firstUse</dt>
  <dd>no longer relevant</dd>
  <dt>-newUpdates</dt>
  <dd>no longer relevant</dd>
  <dt>-noPackagePrefixes</dt>
  <dd>no longer relevant</dd>
  <dt>-noUpdate</dt>
  <dd>no longer relevant</dd>
  <dt>-plugins</dt>
  <dd>no longer relevant</dd>
  <dt>-update</dt>
  <dd>no longer relevant</dd>
</dl>
<h3>Others</h3>
<p>The following command line arguments are defined by various Eclipse plug-ins
  and are only supported if the defining plug-in is installed, resolved and activated.</p>
<dl>
  <dt>-noVersionCheck (workbench)</dt>
  <dd>&lt;description&gt;</dd>
  <dt>-perspective (workbench)</dt>
  <dd>launch Eclipse and switch to the perspective with the given id. As an example, for JDT perspective, we read the
     <a href="../../../org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/ui/JavaUI.html">JDT APIs</a>,
     to find the ID_PERSPECTIVE is <code>"org.eclipse.jdt.ui.JavaPerspective"</code>.</dd>
  <dt>-refresh (org.eclipse.core.resources)</dt>
  <dd>&lt;description&gt;</dd>
  <dt>-showLocation (org.eclipse.ui.ide.workbench)</dt>
  <dd>shows the workspace path in the window title bar.  Overrides the corresponding setting in the 'Workspace'
      preference page.  Optionally a custom path can be given as a second argument.</dd>
  <dt>-allowDeadlock</dt>
  <dd>&lt;description&gt;</dd>
</dl>
<h2>System properties</h2>
<p>The following System properties are used by the Eclipse runtime. Note that
  those starting with &quot;osgi&quot; are specific to the OSGi framework implementation
  while those starting with &quot;eclipse&quot; are particular to the Eclipse
  runtime layered on top of the OSGi framework. </p>
<p>Many of these properties have command line equivalents (see the <a href="#commandline">command
    line arguments</a> section and the value in braces {}). Users are free to
    use either command line or property settings to specify a value. Properties
    can
    be set
  in
  the
  following
  ways:</p>
<ul>
  <li>use -DpropName=propValue as a VM argument to the Java VM</li>
  <li>set the desired property in the config.ini file in the appropriate configuration
    area</li>
</ul>
<dl>
  <dt><a name="activateRuntimePlugins" id="activateRuntimePlugins"></a>eclipse.activateRuntimePlugins</dt>
  <dd>controls activation of runtime plug-ins. RCP applications not requiring services provided by runtime
    plug-ins can set this property to &quot;false&quot; to avoid activation of runtime plug-ins on Eclipse startup</dd>
  <dt><a name="eclipseallowAppRelaunch" id="eclipseallowAppRelaunch"></a>eclipse.allowAppRelaunch</dt>
  <dd>if set to &quot;true&quot; then the main thread will continue to  wait for another application descriptor to be
  launched after the currently running application has quit.  Stopping the system.bundle (i.e. the bundle with a
  bundle ID equal to zero) will force the main thread to stop waiting for another application to launch.
  The default value is &quot;false&quot;</dd>
  <dt><a name="eclipseapplication" id="eclipseapplication"></a>eclipse.application {-application}</dt>
  <dd>the identifier of the application to run. The value given here overrides
    any application defined by the product (see <a href="#eclipseproduct">eclipse.product</a>) being run</dd>
  <dt><a name="eclipseapplicationlaunchdefault" id="eclipseapplicationlaunchdefault"></a>eclipse.application.launchDefault</dt>
  <dd>Controls launching the default application automatically once the platform is running.  A default application is identified
  by the <a href="#eclipseproduct">eclipse.product</a> or the <a href="#eclipseapplication">eclipse.application</a>
  options.  The default value is &quot;true&quot;.  Setting this property to &quot;false&quot; will prevent the default
  application from launching automatically.  Once the platform is running the main thread will wait for an application to be
  launched using an application descriptor service.</dd>
  <dt><a name="eclipseapplicationregisterDescriptors"  id="eclipseapplicationregisterDescriptors"></a>eclipse.application.registerDescriptors</dt>
  <dd>Controls registration of application descriptor services for all installed applications.  The default value is
  &quot;false&quot;.  If set to &quot;false&quot; only the default application will have an application descriptor service
  registered.  If set to &quot;true&quot; then all installed applications will have an application descriptor service registered.</dd>
  <dt><a name="eclipsecommands" id="eclipsecommands"></a>eclipse.commands</dt>
  <dd>a new-line separated list of all command-line arguments passed in when launching
    Eclipse </dd>
  <dt><a name="eclipseconsolelog" id="eclipseconsolelog"></a>eclipse.consoleLog</dt>
  <dd>if &quot;true&quot;, any log output is also sent to Java's System.out (typically
    back to the command shell if any). Handy when combined with -debug </dd>
  <dt><a name="eclipsedebugstartuptime" id="eclipsedebugstartuptime"></a>eclipse.debug.startupTime</dt>
  <dd>the time in milliseconds when the Java VM for this session was started</dd>
  <dt><a name="eclipseeeinstallverify" id="eclipseeeinstallverify"></a>eclipse.ee.install.verify</dt>
  <dd>if set to &quot;true&quot; then the framework will check the required execution
    environment at bundle install time.  The default value is &quot;false&quot;.</dd>
  <dt><a name="eclipseexitOnError" id="eclipseexitOnError"></a>eclipse.exitOnError</dt>
  <dd>if set to &quot;true&quot; then the platform will exit if an unhandled error occurs.  The default value is
  &quot;true&quot;.</dd>
  <dt><a name="eclipseignoreApp" id="eclipseignoreApp"></a>eclipse.ignoreApp</dt>
  <dd>if set to &quot;true&quot; then the main launching thread will not start the default application and
  will proceed in shutting down the platform and exiting.
  The default value is &quot;false&quot;.  This is different than the
  <a href="#eclipseapplicationlaunchdefault">eclipse.application.launchDefault</a> option because the main thread will
  not wait for an application descriptor service to be launched.</dd>
  <dt><a name="eclipseloglevel" id="eclipseloglevel"></a>eclipse.log.level</dt>
  <dd>
    sets the level used when logging messages to the eclipse log.
    <ul type="disc">
      <li><b>ERROR</b> - enables logging only ERROR messages.</li>
      <li><b>WARNING</b> - enables logging of ERROR and WARNING messages.</li>
      <li><b>INFO</b> - enables logging of ERROR, WARNING and INFO messages.</li>
      <li><b>ALL</b> - enables logging of all messages (default value)</li>
    </ul>
  </dd>
  <dt><a name="eclipselogbackupmax" id="eclipselogbackupmax"></a>eclipse.log.backup.max</dt>
  <dd>the max number of backup log files to allow.  The oldest backup log file will be deleted
     after the max number of backup log files is reached as a result of rotating the log file.
     The default value is &quot;10&quot;.  A negative or zero value will cause the default
     value to be used.</dd>
  <dt><a name="eclipselogsizemax" id="eclipselogsizemax"></a>eclipse.log.size.max</dt>
  <dd>the max size in Kb that the log file is allowed to grow.  The log file is rotated when
     the file size exceeds the max size.  The default value is &quot;1000&quot;.
     A negative value will cause the default value to be used.  A zero value indicates
     no max log size.</dd>
  <dt><a name="eclipsenoextensionmunging" id="eclipsenoextensionmunging"></a>eclipse.noExtensionMunging</dt>
  <dd>if &quot;true&quot;, legacy registry extension are left as-is. By default such extensions
    are updated to use the new extension point ids found in Eclipse 3.0.</dd>
  <dt><a name="eclipsenolazyregistrycacheloading" id="eclipsenolazyregistrycacheloading"></a>eclipse.noLazyRegistryCacheLoading {-noLazyRegistryCacheLoading}</dt>
  <dd>if &quot;true&quot;, the platform's plug-in registry cache loading optimization is
      deactivated. By default, configuration elements are loaded from the registry
      cache (when available)
      only on demand, reducing memory footprint. This option forces the registry
  cache to be fully loaded at startup. </dd>
  <dt><a name="eclipsenoregistrycache" id="eclipsenoregistrycache"></a>eclipse.noRegistryCache {-noRegistryCache}</dt>
  <dd>if &quot;true&quot;, the internal extension registry cache is neither read or written</dd>
  <dt><a name="eclipseplugincustomization" id="eclipseplugincustomization"></a>eclipse.pluginCustomization {-pluginCustomization}</dt>
  <dd>the file system location of a properties file containing default settings
      for plug-in preferences. These default settings override default settings
      specified in the primary feature. Relative paths are interpreted relative
  to the current working directory for Eclipse itself.</dd>
  <dt><a name="eclipseproduct" id="eclipseproduct"></a>eclipse.product {-product}</dt>
  <dd>the identifier of the product being run. This controls various branding
  information and what application is used.</dd>
  <dt><a name="registrymultilang" id="registrymultilang"></a>eclipse.registry.MultiLanguage {-registryMultiLanguage}</dt>
  <dd>if &quot;true&quot;, extension registry supports translation to multiple languages. By default extension registry provides
  translation only to the Eclipse locale specified by the <a href="#osginl">osgi.nl</a>.</dd>
  <dt><a name="serviceJobs" id="serviceJobs"></a>eclipse.service.jobs</dt>
  <dd>controls registration of OSGi services. Set to &quot;false&quot; to suppress registration of OSGi
    services by the <code>org.eclipse.core.jobs</code> plug-in</dd>
  <dt><a name="servicePref" id="servicePref"></a>eclipse.service.pref</dt>
  <dd>Controls registration of OSGi services. Set to &quot;false&quot; to suppress registration of OSGi
     services by the <code>org.eclipse.equinox.preferences</code> plug-in</dd>
  <dt><a name="eclipsestarttime" id="eclipsestarttime"></a>eclipse.startTime</dt>
  <dd>This property is set at the time Eclipse is started.  The value of this property a string
      representation of the value returned by System.currentTimeMillis().  This value is not
      intended to be set by users.</dd>
  <dt><a name="eclipsestateSaveDelayInterval" id="eclipsestateSaveDelayInterval"></a>eclipse.stateSaveDelayInterval</dt>
  <dd>the delay interval (in milliseconds) for persisting state change requests.  The default
    is 30000 ms (30 seconds).  State change requests are delayed to prevent massive amounts
    of disk writes while performing administrative operations (e.g. installing bundles).
    The delay interval is used to wait for a period of inactivity before persisting the
    framework state information.</dd>
  <dt><a name="eclipsesecurity"></a>eclipse.security</dt>
  <dd>specifies that a security policy and manager should be configured when the framework is launched.  If the launcher is used (org.eclipse.equinox.launcher)
   and this property is set to any value then the launcher will configure a java.security.Policy that grants all permissions to the launcher
   and the framework.  When the framework is launched it will use this property to determine the security manager to use.  If set to <b>osgi</b>
   then the Equinox security manager is used.  This security manager is required to fully support the OSGi Conditional Permission Admin specification.  If
   the property is set to the empty string then java.lang.SecurityManager will be used; otherwise the property specifies a security manager
   class that should be used as the security manager.</dd>
  <dt><a name="eclipsetracesizemax"></a>eclipse.trace.size.max <span style="font-style: italic;">NEW</span></dt>
  <dd>the max size in Kb that the trace file is allowed to grow. The trace file is rotated when the file size exceeds the max size.
  The default value is "1000". A negative value will cause the default value to be used. A zero value indicates no max trace size.</dd>
  <dt><a name="eclipsetracebackupmax"></a>eclipse.trace.backup.max <span style="font-style: italic;">NEW</span></dt>
  <dd>the max number of backup trace files to allow. The oldest backup trace file will be deleted after the max number of backup trace
  files is reached as a result of rotating the trace file. The default value is "10". A negative or zero value will cause the default value to be used.</dd>
  <dt><a name="eclipsevm" id="eclipsevm"></a>eclipse.vm {-vm}</dt>
  <dd>the path to the Java executable used to run Eclipse. This information is
  used to construct relaunch command lines.</dd>
  <dt><a name="eclipsevmargs" id="eclipsevmargs"></a>eclipse.vmargs {-vmargs}</dt>
  <dd>lists the VM arguments used to run Eclipse. This
      information is used to construct relaunch command
  lines.</dd>
  <dt><a name="eclipseorientation" id="eclipseorientation"></a>eclipse.orientation {-dir}</dt>
  <dd>the workbench orientation which can be <b>ltr</b> (left-to-right) or <b>rtl</b> (right-to-left).</dd>
  <dt><a name="equinoxsecurityvm"></a>equinox.security.vm</dt>
  <dd>If set to &quot;server&quot;, security modules will not attempt to substitute VM's JAAS processing.</dd>
  <dt><a name="swtreportNonDisposed"></a>org.eclipse.swt.graphics.Resource.reportNonDisposed</dt>
  <dd>If set to &quot;true&quot;, <a href="PLUGINS_ROOT/org.eclipse.platform.doc.isv/guide/swt_graphics.htm#swtreportNonDisposed">non-disposed SWT Resources</a> will be logged.</dd>
  <dt><a name="osgiadaptor"></a>osgi.adaptor</dt>
  <dd>the class name of the OSGi framework adaptor to use.</dd>
  <dt><a name="osgiarch"></a>osgi.arch {-arch}</dt>
  <dd>the processor architecture value. The value should be one of the processor architecture
  names known to Eclipse (e.g., x86, ppc, sparc, ...). See <tt>org.eclipse.osgi.service.environment.Constants</tt> for known values.</dd>
  <dt><a name="osgibaseconfigurationarea"></a>osgi.baseConfiguration.area</dt>
  <dd>specifies a base configuration that is used when
      <a href="#osgiconfigurationarea">osgi.configuration.area</a> is not specified.</dd>
  <dt><a name="osgibundlefilelimit"></a>osgi.bundlefile.limit</dt>
  <dd>specifies a limit on the number of jar files the framework will keep open.
      The minimum value allowed is 10.  Any value less than 10 will disable the
      bundle file limit, making the the number of jar files the framework
      keeps open unlimited.  By default the value is 100.</dd>
  <dt><a name="osgibundles"></a>osgi.bundles</dt>
  <dd>The comma-separated list of bundles which are automatically installed
    and optionally started
     once the system is up and running. Each entry is of the form:<br>
	 <pre>    &lt;URL | simple bundle location&gt;[@ [&lt;start-level&gt;] [&quot;:start&quot;]]</pre>
     The start-level indicates the OSGi start level at which the bundle should
     run. If the start-level (&gt;0 integer) is omitted then the framework will use the
     default start level for the bundle. If the &quot;start&quot; 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.  If the location is not a fully qualified path or URL then a search is done
     to find the highest version available.  Note that the reference: protocol can only be used to refer
     to content specified by a file: URL (e.g. reference:file:/path/to/mybundle_1.0.0.jar).
     If the bundle is a directory bundle then using a file: URL without the use of reference: is not
     supported (e.g. file:/path/to/myDirectoryBundle_1.0.0/ must use reference:file:/path/to/myDirectoryBundle_1.0.0/)
    </dd>
  <dt><a name="osgibundlesdefaultStartLevel"></a>osgi.bundles.defaultStartLevel</dt>
  <dd>this is the startlevel that all bundles will be set to if installed by Eclipse Update.
  Bundles which are specified on the <a href="#osgibundles">osgi.bundles</a> list can specify a particular startlevel.
  If they do not specify a startlevel then they default to the value of
  osgi.bundles.defaultStartLevel.  The default value of osgi.bundles.defaultStartLevel is 4.</dd>
  <dt><a name="osgicompatibilitybootdelegation" id="osgicompatibilitybootdelegation"></a>osgi.compatibility.bootdelegation</dt>
  <dd>if set to &quot;true&quot; then the parent (boot by default) classloader is delegated to as a last resort if a
  class or resource cannot be found.  The default value is &quot;true&quot;.</dd>
  <dt><a name="osgicompatibilityerrorOnFailedStart" id="osgicompatibilityerrorOnFailedStart"></a>osgi.compatibility.errorOnFailedStart</dt>
  <dd>A bundle may specify a lazy activation policy using the bundle manifest headers Eclipse-LazyStart or Bundle-ActivationPolicy.  According
  to the OSGi R4.1 specification, if a bundle with a lazy activation policy fails to start then class loads must still succeed.  Before the OSGi
  R4.1 specification Eclipse defined the lazy activation policy such that failed starts would cause class loading errors to be thrown.  If
  osgi.compatibility.errorOnFailedStart is set to &quot;true&quot; then failed starts will result in class loading errors; otherwise the
  activation error is logged and the classes are allowed to load from bundles which failed to start.  The default value is &quot;true&quot;.</dd>
  <dt><a name="osgicompatibilityeagerStart.LazyActivation" id="osgicompatibilityeagerStart.LazyActivation"></a>osgi.compatibility.eagerStart.LazyActivation</dt>
  <dd>The OSGi R4.1 specification mandates that all bundles must be marked for start before they are allowed to activate.  This includes bundles
  which specify a lazy activation policy.  A new method Bundle.start(options) has been added to allow lazy activated bundles to be activated
  according to their lazy activation policy.  Before the OSGi R4.1 specification Eclipse defined the lazy activation policy such that
  lazy activated were automatically activated on first class load even though they were not marked for activation.
  If osgi.compatibility.eagerStart.LazyActivation is set to &quot;true&quot; then bundles with the lazy activation policy will automatically be
  marked for activation; otherwise bundles with the lazy activation policy must be started with the new Bundle.start(options) method before
  being allowed to lazy activate.  The default value is &quot;true&quot;.</dd>
  <dt><a name="osgicheckConfiguration" id="osgicheckConfiguration"></a>osgi.checkConfiguration</dt>
  <dd>if set to &quot;true&quot; then timestamps are check in the configuration cache to ensure that the cache
  is up to date with respect to the contents of the installed bundles.  The default value is &quot;false&quot;.</dd>
  <dt><a name="osgiclassloadersingleThreadLoads" id="osgiclassloadersingleThreadLoads"></a>osgi.classloader.singleThreadLoads</dt>
  <dd>if set to &quot;true&quot; then only one thread is allowed to load a class at a time.  The default value is
   &quot;false&quot;.  This option can be used to work around certain VM bugs which can cause deadlock.
   See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=121737" target="_blank">bug 121737</a>.  Note that recent
   discussions in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=227587" target="_blank">bug 227587</a> have shown
   that this option introduces another kind of deadlock.</dd>
  <dt><a name="osgiclassloaderlock" id="osgiclassloaderlock"></a>osgi.classloader.lock</dt>
  <dd>
    the classloader locking strategy to use when defining classes.  The valid types are the following:
    <ul type="disc">
      <li><b>classname</b> - lock on the classname.</li>
      <li><b>classloader</b> - lock on the classloader (default value).</li>
    </ul>
    There are cases where bundle cycles may cause class loader deadlock to occur (see
    <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=229621" target="_blank">bug 229621</a>).  This option
    can be used to work around this deadlock by locking on the class name instead of the class loader
    when defining a class.  This option should be used with caution because some VMs still lock the
    class loader natively (e.g. the Sun VM).  When running on these kinds of VMs deadlock can still
    occur because of the VM lock.
  </dd>
  <dt><a name="osgiclassloadercopynatives" id="osgiclassloadercopynatives"></a>osgi.classloader.copy.natives <span style="font-style: italic;">NEW</span></dt>
  <dd>
    If set to &quot;true&quot; then native code which is loaded from a bundle will be copied to a unique
    location on disk each time a class loader asks to load the library from the bundle.  This may be needed in
    scenarios where the framework is restarted without shutting down the VM.  The default value is &quot;false&quot;.
  </dd>
  <dt><a name="osgiclassloadertype" id="osgiclassloadertype"></a>osgi.classloader.type <span style="font-style: italic;">NEW</span></dt>
  <dd>
    If set to &quot;parallel&quot; then a check is done on JavaSE 7 for the ClassLoader#registerAsParallelCapable
    method and if found then it is called to allow for parallel class loads.  On Java SE 7 this is the preferred
    way to avoid class loader deadlock because of cyclic class loaders.
  </dd>
  <dt><a name="osgiclean"></a>osgi.clean</dt>
  <dd>if set to &quot;true&quot;, any cached data used by the OSGi framework and eclipse runtime
will be wiped clean.  This will clean the caches used to store bundle
dependency resolution and eclipse extension registry data.  Using this option
will force eclipse to reinitialize these caches.</dd>
  <dt><a name="osgiconfigurationcascaded"></a>osgi.configuration.cascaded</dt>
  <dd>if set to &quot;true&quot;, this configuration is cascaded to a parent
    configuration.  The parent configuration is specified by the <a href="#osgisharedconfigurationarea">osgi.sharedConfiguration.area</a>.
    See the section on <a href="#locations">locations</a> for more details.</dd>
  <dt><a name="osgiconfigurationarea"></a>osgi.configuration.area {-configuration}</dt>
  <dd>the configuration location for this run of the platform. The configuration
    determines what plug-ins will run as well as various other system settings.
    See the section on <a href="#locations">locations</a>  for
    more details.</dd>
  <dt><a name="osgiconfigurationareadefault" id="osgiconfigurationareadefault"></a>osgi.configuration.area.default</dt>
  <dd>the default configuration location for this run of the platform. The configuration
    determines what plug-ins will run as well as various other system settings.
    This value (i.e., the default setting) is only used if no value for the osgi.configuration.area
    is set. See the section on <a href="#locations">locations</a>  for
    more details.</dd>
  <dt><a name="osgiconsole"></a>osgi.console {-console [[host:]port]} </dt>
  <dd>if set to a non-null value, the OSGi console (if installed) is enabled.
    This is handy for investigating the state of the system.
    The value syntax is [[host:]port] where the port and optional host name specify which port
    and hostname on which the console listens and directs its output to.  If the value does not
    specify a valid port or hostname (including the empty string) then the console will
    listen to System.in and direct its output to System.out. In order for this option
    to be supported the Equinox console must be installed.  See <a href="../../guide/console_shell.htm">Console Shell</a>
    for more information.</dd>
  <dt><a name="osgicontextClassLoaderParent"></a>osgi.contextClassLoaderParent</dt>
  <dd>the classloader type to use as the parent classloader of the context
    classloader used by the Framework.  The valid types are the following:
    <ul type="disc">
      <li><b>app</b> - the application classloader.</li>
      <li><b>boot</b> - the boot classloader.</li>
      <li><b>ext</b> - the extension classloader.</li>
      <li><b>fwk</b> - the framework classloader.</li>
      <li><b>ccl</b> - the original context classloader
     that was set when the framework launched (default value).</li>
    </ul>
  </dd>
  <dt><a name="osgidataAreaRequiresExplicitInit"></a>osgi.dataAreaRequiresExplicitInit</dt>
  <dd>if &quot;true&quot;, don't allow clients to initialize instance location if the instance
    area is not explicitly defined yet. This prevents a plug-in that starts early from accessing
    the instance area before it has been configured by the osgi.instance.area setting.
    It is recommended to set osgi.dataAreaRequiresExplicitInit=true.
    See <a href="#osgiinstancearea">osgi.instance.area</a>.
  </dd>
  <dt><a name="osgidebug"></a>osgi.debug {-debug}</dt>
  <dd>if set to a non-null value, the platform is put in debug mode. If the value
    is a string it is interpreted as the location of the
    .options file. This file indicates what debug
    points are
    available
    for a plug-in and whether or not they are enabled. If a location is not specified,
  the platform searches for the .options file under the install directory.</dd>
  <dt><a name="osgidev"></a>osgi.dev {-dev}</dt>
  <dd>if set to the empty string, dev mode is simply turned on. This property
    may also be set to a comma-separated class path entries
    which are added to
    the class
    path of each
    plug-in or a URL to a Java properties file containing custom classpath additions
    for a set of plug-ins. For each plug-in requiring a customized dev time classpath
    the file will contain an entry of the form<br>
<pre>    &lt;plug-in id&gt;=&lt;comma separated list of classpath entries to add&gt;</pre>
    where plug-in id &quot;*&quot; matches any plug-in not otherwise mentioned.</dd>
  <dt><a name="osgifilepermissionscommand"></a>osgi.filepermissions.command</dt>
  <dd>specifies an optional OS specific command to set file permissions on extracted
      native code.  On some operating systems it is required that native libraries be
      set to executable.  This optional property allows you to specify the command.
      For example, on a UNIX style OS you could have the following value:
      <pre>    osgi.filepermissions.command=&quot;chmod +rx [fullpath]&quot;</pre>
      The [fullpath] is used to substitute the actual file path by the framework.
  </dd>
  <dt><a name="o.pngramework"></a>osgi.framework</dt>
  <dd>the URL location of the OSGi framework. Useful if the Eclipse install
  is disjoint. See the section on <a href="#locations">locations</a> for more details. </dd>
  <dt><a name="o.pngrameworkclasspath"></a>osgi.frameworkClassPath</dt>
  <dd>a comma separated list of classpath entries for the OSGi framework implementation.
    Relative locations are interpreted as relative to the framework location
    (see <a href="#o.pngramework">osgi.framework</a>)</dd>
  <dt><a name="osgiframeworkextensions"></a>osgi.framework.extensions</dt>
  <dd>a comma-separated list of framework extensions.  Each entry is of the form:<br>
	 <pre>    &lt;simple bundle location&gt;</pre>
      Simple bundle locations are searched in the parent directory of the
      org.eclipse.osgi bundle.  Framework extensions may be used to run Eclipse with a different
      framework adaptor.  The framework extension may contain an eclipse.properties file to set
      system properties.  For example, a framework extension that provides a framework adaptor
      implementation can specify what the adaptor class is by setting the
      <a href="#osgiadaptor">osgi.adaptor</a> property.</dd>
  <dt><a name="osgiframeworkshape"></a>osgi.framework.shape</dt>
  <dd>set to the shape of the Eclipse OSGi Framework implementation.  This property is set when
  the Eclipse platform is started and is not intended by be set by the user.  The value
  &quot;jar&quot; indicates that the Eclipse OSGi Framework is contained in a single jar.
  The value &quot;folder&quot; indicates that the Eclipse OSGi Framework is contained in a
  directory.</dd>
  <dt><a name="osgiframeworklibraryextensions"></a>osgi.framework.library.extensions</dt>
  <dd>a comma separated list of additional library file extensions that
    must be searched for.  If not set then only the library name returned by
    System.mapLibraryName(String) will be used to search.  This is needed for
    certain operating systems which allow more than one extension for a library.
    For example AIX allows library extensions of .a and .so, but
    System.mapLibraryName(String) will only return names with the .a extension.</dd>
  <dt><a name="osgiframeworkParentClassloader"></a>osgi.frameworkParentClassloader</dt>
  <dd>the classloader type to use as the parent classloader for the the Framework.  The valid types are the following:
    <ul type="disc">
      <li><b>app</b> - the application classloader.</li>
      <li><b>boot</b> - the boot classloader.</li>
      <li><b>ext</b> - the extension classloader.</li>
      <li><b>current</b> - the classloader used to load the equinox launcher.</li>
    </ul>
  </dd>
  <dt><a name="osgiframeworkactiveThreadType"></a>osgi.framework.activeThreadType</dt>
  <dd>
   if set to <b>normal</b> then an active framework thread is started when the framework is launched
   that monitors the lifecycle of the framework.  This thread is a non-daemon thread and is used to prevent
   the VM from shutting down when the framework is active and only daemon threads are active in the VM.
   When the framework is shutdown then the active framework thread will quit which should allow the VM to
   shutdown as long as no other non-deamon threads are active in the VM.  The default value is set to
   <b>normal</b>.  Setting this option to any other value besides <b>normal</b> will prevent the
   active framework thread from getting started when the framework is launched.
  </dd>
  <dt><a name="osgiframeworkuseSystemProperties"></a>osgi.framework.useSystemProperties</dt>
  <dd>controls whether the framework properties are backed by the global System properties
    or held privately for each instance of the framework.  By default the framework properties
    are backed by the System properties (e.g. true).  This property is useful when running
    multiple instances of the OSGi Framework within the same VM and each instance has a separate
    set of configuration properties (e.g. set in the config.ini).</dd>
  <dt><a name="osgigenericAliases"></a>osgi.genericAliases</dt>
  <dd>a comma separated list of generic aliases that can be used to map existing manifest
    headers onto Eclipse-GenericCapability and Eclipse-GenericRequire manifest headers.  The
    osgi.genericAliases property uses the following syntax:
    <pre>
  osgi.genericAliases ::= generic-alias ( ',' generic-alias ) *
  generic-alias       ::= capability-alias ':' require-alias ':' capability-type</pre>
    For example, to map the OSGi headers Export-Service and Import-Service headers
    onto Eclipse-GenericCapability and Eclipse-GenericRequire headers you would use
    the following value:
    <pre>  osgi.genericAliases=Export-Service:Import-Service:osgi.service</pre>
  </dd>
  <dt><a name="osgihookconfigurators"></a>osgi.hook.configurators</dt>
  <dd>a comma separated list of hook configurators.  If this property is set then the list of
    configurators specified will be the only configurators used.  Any hook configurators
    specified in hookconfigurators.properties files will be ignored.</dd>
  <dt><a name="osgihookconfiguratorsinclude"></a>osgi.hook.configurators.include</dt>
  <dd>a comma separated list of additional hook configurators.  This is helpful for
    configuring optional hook configurators.  This option is ignored if the
    <a href="#osgihookconfigurators">osgi.hook.configurators</a> option is used.</dd>
  <dt><a name="osgihookconfiguratorsexclude"></a>osgi.hook.configurators.exclude</dt>
  <dd>a comma separated list of hook configurators to exclude.  This is helpful for disabling
    hook configurators that are specified in hook configurator properties files.  This option
    is ignored if the <a href="#osgihookconfigurators">osgi.hook.configurators</a> option is used.</dd>
  <dt><a name="osgijavaprofile"></a>osgi.java.profile</dt>
  <dd>a URL to the JRE profile file to use.  The specified URL is read as a Java properties
     file.  A JRE profile contains values for the properties org.osgi.framework.system.packages,
     org.osgi.framework.bootdelegation and org.osgi.framework.executionenvironment.  If the
     osgi.java.profile is not set then a profile is selected based on the
     java.specification.version value of the running JRE.</dd>
  <dt><a name="osgijavaprofilebootdelegation"></a>osgi.java.profile.bootdelegation</dt>
  <dd>
    a java profile <a href="#osgijavaprofile">osgi.java.profile</a> may contain a
    &quot;org.osgi.framework.bootdelegation&quot; property.  This value may be used to set the system
	property &quot;org.osgi.framework.bootdelegation&quot;.  The osgi.java.profile.bootdelegation
	indicates the policy for bootdelegation to be used.  The following values are valid
	(default is ignore):
    <ul type="disc">
      <li><b>ignore</b> - indicates that
          the &quot;org.osgi.framework.bootdelegation&quot; value in the java profile should be ignored.
          The system property &quot;org.osgi.framework.bootdelegation&quot; will be used to
          determine which packages should be delegated to boot.
      </li>
      <li><b>override</b> -
          indicates that the &quot;org.osgi.framework.bootdelegation&quot; in the java profile should
          override the system property &quot;org.osgi.framework.bootdelegation&quot;.
      </li>
      <li><b>none</b> -
          indicates that the &quot;org.osgi.framework.bootdelegation&quot; in the java profile AND
          the system properties should be ignored.  This is the most strict option.
          Running with this option causes the framework to use the OSGi R4 strict boot
          delegation model.
      </li>
    </ul>
  </dd>
  <dt><a name="osgiinstallarea" id="osgiinstallarea"></a>osgi.install.area {-install}</dt>
  <dd>the install location of the platform. This setting indicates the location
    of the basic Eclipse plug-ins and is useful if the Eclipse install is disjoint.
  See the section on <a href="#locations">locations</a> for more details. </dd>
  <dt><a name="osgiinstancearea"></a>osgi.instance.area {-data}</dt>
  <dd>the instance data location for this session. Plug-ins use this location
    to store their data. For example, the Resources plug-in uses this as the
    default location for projects (aka the workspace). See the section on <a href="#locations">locations</a> for
    more details. Set <a href="#osgidataAreaRequiresExplicitInit">osgi.dataAreaRequiresExplicitInit</a> to ensure
    that data area is explicitly initialized before plug-ins can use it.</dd>
  <dt><a name="osgiinstanceareadefault" id="osgiinstanceareadefault"></a>osgi.instance.area.default</dt>
  <dd>the default instance data location for this session. Plug-ins use this
    location to store their data. For example, the Resources plug-in uses this
    as the
    default location for projects (aka the workspace). This value (i.e., the
    default setting) is only used if no value for the osgi.instance.area
    is set. See the section on <a href="#locations">locations</a> for
    more details.</dd>
  <dt><a name="osgilocking"></a>osgi.locking</dt>
  <dd>the locking type to use for this run of the platform.  The valid locking types
  are &quot;java.io&quot;, &quot;java.nio&quot;, and &quot;none&quot;.  The default value is
  &quot;java.nio&quot; unless the JRE does not support &quot;java.nio&quot; then &quot;java.io&quot;
  is the default.</dd>
  <dt><a name="osgimanifestcache"></a>osgi.manifest.cache</dt>
  <dd>the location where generated manifests are discovered and generated. The
    default is in the configuration area but the manifest cache can be stored
    separately.</dd>
  <dt><a name="osginl"></a>osgi.nl {-nl}</dt>
  <dd>the name of the locale on which Eclipse platform will run. NL values should
    follow the standard Java locale naming conventions.</dd>
  <dt><a name="osginlextensions"></a>osgi.nl.extensions {-nlExtensions}</dt>
  <dd>the NL extensions, such as collation rules (sorting, searching, grouping), calendar system (locale)
    and currency format. This is a list of <a href="http://userguide.icu-project.org/locale#TOC-Keywords">keyword</a>=value pairs. For example:
    <pre>-nlExtensions &quot;@collation=phonebook;calendar=hebrew;currency=USD&quot;</pre></dd>
  <dt><a name="osginluser"></a>osgi.nl.user</dt>
  <dd>the name of the locale when the user explicitly adds -nl to the command-line arguments.</dd>
  <dt><a name="osginoshutdown"></a>osgi.noShutdown {-noExit}</dt>
  <dd>if &quot;true&quot;, the OSGi Framework will not be shut down after the Eclipse application has ended.  This
      is useful for examining the OSGi Framework after the Eclipse application has ended.  Note that the VM will terminate
      if no active non-daemon threads exists. See <a href="#osgiframeworkactiveThreadType">osgi.framework.activeThreadType</a>.</dd>
  <dt><a name="osgios"></a>osgi.os {-os}</dt>
  <dd>the operating system value. The value should be one of the operating system
  names known to Eclipse (e.g., win32, linux, ...). See <tt>org.eclipse.osgi.service.environment.Constants</tt> for known values.</dd>
  <dt><a name="osgiparentclassloader"></a>osgi.parentClassloader</dt>
  <dd>the classloader type to use as the parent classloader for all bundles installed
  in the Framework.  The valid types are the following:
    <ul type="disc">
      <li><b>app</b> - the application classloader.</li>
      <li><b>boot</b> - the boot classloader.</li>
      <li><b>ext</b> - the extension classloader.</li>
      <li><b>fwk</b> - the framework classloader.</li>
    </ul>
  </dd>
  <dt><a name="osgirequiredjavaversion"></a>osgi.requiredJavaVersion</dt>
  <dd>The minimum java version that is required to launch Eclipse.  The default value is
      &quot;1.4.1&quot;.</dd>
  <dt><a name="osgiresolvermode"></a>osgi.resolverMode</dt>
  <dd>the mode used to resolve bundles installed in the Framework.  The default resolver
      mode is not strict.  The following options are available.
    <ul type="disc">
      <li><b>strict</b> - the resolver is in strict mode and will enforce access restriction rules when loading classes and resources from exported packages which specify the x-internal or x-friends directives.</li>
      <li><b>development</b> - used for development time resolution.  This mode disables certain resolver rules that are not needed at development time.  For example, singleton selection is disabled to allow the development of multiple versions of a singleton bundle</li>
    </ul>
  </dd>
  <dt><a name="osgi.resolver.usesMode"></a>osgi.resolver.usesMode</dt>
  <dd>
    the resolver mode used to resolve <b>uses</b> directives on Export-Package statements.
     <ul type="disc">
      <li><b>aggressive</b> - aggressively seeks a solution with no class space inconsistencies (default value).  This mode may be very expensive depending on the number of bundles and number of duplicate exports in the system.</li>
      <li><b>tryFirst</b> - only tries the first solution selected by the resolver.  This mode is very fast but may result in unresolved bundles because of class space inconsistencies.</li>
      <li><b>ignore</b> - ignores all uses directives on exports.  This mode is very fast by may result in inconsistent class spaces in resolved bundles.</li>
    </ul>
  </dd>
  <dt><a name="osgisharedconfigurationarea"></a>osgi.sharedConfiguration.area</dt>
  <dd>the shared configuration location for this run of the platform.  If the
  <a href="#osgiconfigurationcascaded">osgi.configuration.cascaded</a> property is set
  to &quot;true&quot; then shared configuration area is used as the parent configuration.</dd>
  <dt><a name="osgisignedcontentsupport"></a>osgi.signedcontent.support</dt>
  <dd>A comma separated list of options for signed content support.  The valid types are the following:
    <ul type="disc">
      <li><b>certificate</b> - enables parsing and verification of certificates.</li>
      <li><b>trust</b> - enables verification of certificate trust.  This option implies
      &quot;certificate&quot;.</li>
      <li><b>runtime</b> - enables verification of signed bundle content at runtime.
      This option implies &quot;certificate&quot;.</li>
      <li><b>authority</b> - enables the default authorization engine.  This option implies &quot;certificate&quot; and &quot;trust&quot;..</li>
      <li><b>all</b> - same as &quot;certificate,trust,runtime,authority&quot;.</li>
    </ul>
  </dd>
  <dt><a name="osgisignedcontenttrustengine"></a>osgi.signedcontent.trust.engine</dt>
  <dd>
  A service property key used to identify an implementation of the <b>org.eclipse.osgi.service.security.TrustEngine</b> service.
  A TrustEngine service should be registered with a unique value for this property to allow selection of the TrustEngine
  service implementation.  The <b>osgi.signedcontent.trust.engine</b> property can be used as a configuration
  property to select particular TrustEngine service implementations at runtime.  If this property is not set then
  all available TrustEngine services are used at runtime.
  </dd>
  <dt><a name="osgisplashlocation"></a>osgi.splashLocation</dt>
  <dd>the absolute URL location of the splash screen (.bmp file) to to show while
    starting Eclipse. This property overrides any value set in <a href="#osgisplashpath">osgi.splashPath</a>.</dd>
  <dt><a name="osgisplashpath"></a>osgi.splashPath</dt>
  <dd>a comma separated list of URLs to search for a file called splash.bmp.
  This property is overriden by any value set in <a href="#osgisplashlocation">osgi.splashLocation</a>.</dd>
  <dt><a name="osgistartlevel"></a>osgi.startLevel</dt>
  <dd>the start level value the framework will be set to at startup.  The default value is 6.</dd>
  <dt><a name="osgistrictbundleentrypath"></a>osgi.strictBundleEntryPath</dt>
  <dd>
    On some operating systems Equinox may return a bundle entry that is requested with a path that does not
    correspond to an actual bundle entry path. For example, on Windows file name comparison operations are
    case insensitive. When this property is set to true, Equinox operates more strictly by checking that the
    requested bundle entry path exists. The default value is false for compatibility with the previous behaviour
    of Equinox. This property is relevant only when the bundle is installed from a folder (not jarred) and is
    ignored otherwise.
  </dd>
  <dt><a name="osgisupportmultipleHosts"></a>osgi.support.multipleHosts <span style="font-style: italic;">NEW</span></dt>
  <dd>
    if set to <b>true</b> then the framework will attempt to attach a fragment to all available host
    bundles which satisfy the fragment bundle's Fragment-Host constraint.  The default value is <b>false</b>.
  </dd>
  <dt><a name="osgisupportsignatureverify"></a>osgi.support.signature.verify</dt>
  <dd>This option has been deprecated.  Use <a href="#osgisignedcontentsupport">osgi.signedcontent.support</a> instead.
  </dd>
  <dt><a name="osgisupportclasscertificate"></a>osgi.support.class.certificate</dt>
  <dd>
   if set to <b>true</b> then the certificates available from a signed bundle are used when defining the classes from
   the signed bundle.  The default value is <b>true</b>.
   This option only takes effect when <a href="#osgisignedcontentsupport">osgi.signedcontent.support</a> is set
   to <b>certificate</b>.
  </dd>
  <dt><a name="osgisyspath"></a>osgi.syspath</dt>
  <dd>set to the path where the eclipse OSGi Framework (org.eclipse.osgi) implementation
  is located.  For example, &quot;&lt;eclipse install path&gt;/eclipse/plugins&quot;.
  This property is set when the Eclipse platform is started and is not intended by be
  set by the user.</dd>
  <dt><a name="osgiuserarea"></a>osgi.user.area {-user}</dt>
  <dd>the location of the user area. The user area contains data (e.g., preferences)
    specific to the OS user and independent of any Eclipse install, configuration
    or instance. See the section on <a href="#locations">locations</a> for more
    details.</dd>
  <dt><a name="osgiuserareadefault" id="osgiuserareadefault"></a>osgi.user.area.default</dt>
  <dd>the default location of the user area. The user area contains data (e.g.,
    preferences) specific to the OS user and independent of any Eclipse install,
    configuration
    or instance. This value (i.e., the default setting) is only used if no value
    for the osgi.user.area is set. See the section on <a href="#locations">locations</a> for
    more details.</dd>
  <dt><a name="osgiws"></a>osgi.ws {-ws}</dt>
  <dd>the window system value. The value should be one of the Eclipse window
    system names known to Eclipse (e.g., win32, motif, ...).</dd>
</dl>
<h2><a name="environment"></a>Environment Variables</h2>
<p>The following environment variables are used by the Eclipse runtime. They may have
  command line equivalents (see the <a href="#commandline">command line arguments</a>
  section). Users are free to use either command line or environment variables to specify
  a value.</p>
<dl>
  <dt><a name="env.eclipsekeyring"></a>ECLIPSE_KEYRING</dt>
  <dd>Set to override the location of the default secure storage. See the
    <a href="#eclipsekeyring">-eclipse.keyring</a> command line option.</dd>
</dl>
<h2><a name="locations"></a>Locations
</h2>
<p>The Eclipse runtime defines a number of <i>locations</i> which give plug-in
  developers context for reading/storing data and Eclipse users a control over
  the scope of data sharing and visibility. Eclipse defines the following notions
  of location:</p>
<dl>
    <dt>User (-user) {<a href="#osgiuserarea">osgi.user.area</a>} [@none, @noDefault, @user.home, @user.dir,
      filepath, url]</dt>
    <dd>User locations are specific to, go figure, users. Typically the user
      location is based on the value of the Java <code>user.home</code> system
      property but this can be overridden. Information such as user scoped preferences
      and login information may be found in the user location.</dd>
    <dt>Install (-install) {osgi.install.area} [@user.home, @user.dir, filepath,
      url]</dt>
    <dd>An install location is where Eclipse itself is installed. In practice
      this location is the directory (typically &quot;eclipse&quot;) which is
      the parent of the eclipse.exe being run or the plugins directory containing the org.eclipse.equinox.launcher bundle. This location should
      be considered read-only to normal users as an install may be shared by
      many users. It is possible to set the install location and decouple eclipse.exe
      from the rest of Eclipse.</dd>
    <dt>Configuration (-configuration) {osgi.configuration.area} [@none, @noDefault,
      @user.home, @user.dir, filepath, url]</dt>
    <dd>Configuration locations contain files which identify and manage the (sub)set
      of an install to run. As such, there may be many configurations per install.
      Installs may come with a default configuration area but typical startup
      scenarios involve the runtime attempting to find a more writable configuration
      location. </dd>
    <dt>Instance (-data) {osgi.instance.area} [@none, @noDefault, @user.home,
      @user.dir, filepath, url]</dt>
    <dd>Instance locations contain user-defined data artifacts. For example,
      the Resources plug-in uses the instance area as the workspace location
      and thus the default home for projects. Other plugins are free to write
      whatever files they like in this location.</dd>
</dl>
<p>While users can set any of these locations, Eclipse will compute reasonable
  defaults if values are not given. The most common usecase for setting location
  is the instance area or, in the IDE context, the workspace. To run the default
  Eclipse configuration on a specific data set you can specify:</p>
<pre>    eclipse -data c:\mydata</pre>
<h3>More detail</h3>
<p>Locations are URLs. For simplicity, file paths are also accepted and automatically
  converted to file: URLs. For better control and convenience, there are also
  a number of predefined symbolic locations which can be used. Note that not
  all combinations of location type and symbolic value are valid. A table below
  details which combinations are possible. Since the default case is for all
  locations to be set, valid and writable, some plug-ins may fail in other setups
  even if they are listed as possible. For example, it is unreasonable to expect
  a plug-in focused on user data (e.g., the Eclipse Resources plug-in) to do much
  if the instance area is not defined. It is up to plug-in developers to choose
  the setups they support and design their functionality accordingly.</p>
<dl>
    <dt>@none</dt>
    <dd>Indicates that the corresponding location should never be set either
      explicitly or to its default value. For example, an RCP style application
      which has no user data may use osgi.instance.area=@none to prevent
      extraneous files being written to disk. @none must not be followed by any
      additional path segments.</dd>
    <dt>@noDefault</dt>
    <dd>Forces a location to be undefined or explicitly defined (i.e., Eclipse
      will not automatically compute a default value). This is useful where you
      want to allow for data in the corresponding location but the Eclipse default
      value is not appropriate. @noDefault must not be followed by any
      additional path segments.</dd>
    <dt>@user.home</dt>
    <dd>Directs Eclipse to compute a location value relative to the user's home
      directory. @user.home can be followed
      by additional path segments. In all cases, the string &quot;@user.home&quot; is
      simply replaced with the value of the Java &quot;user.home&quot; System
      property. For example, setting<br>
      &nbsp;&nbsp;&nbsp;&nbsp;osgi.instance.area=@user.home/myWorkspace<br>
      results in a value of
      <br>
      &nbsp;&nbsp;&nbsp;&nbsp;file:/users/bob/myWorkspace</dd>
    <dt>@user.dir</dt>
    <dd>Directs Eclipse to compute a location value relative to the current working
      directory. @user.dir can be followed
      by additional path segments. In all cases, the string &quot;@user.dir&quot; is
      simply replaced with the value of the Java &quot;user.dir&quot; System
      property. For example, setting<br>
&nbsp;&nbsp;&nbsp;&nbsp;osgi.instance.area=@user.dir/myWorkspace<br>
results in a value of <br>
&nbsp;&nbsp;&nbsp;&nbsp;file:/usr/share/eclipse/myWorkspace</dd>
</dl>
<table width="100%" border="0" bgcolor="#FFFFFF">
  <tr bgcolor="#CCCCCC">
    <td width="10%">location/value</td>
    <td width="17%"><div align="center">supports default</div></td>
    <td width="17%"><div align="center">file/URL</div>
    </td>
    <td width="17%"><div align="center">@none</div>
    </td>
    <td width="17%"><div align="center">@noDefault</div>
    </td>
    <td width="17%"><div align="center">@user.home</div>
    </td>
    <td width="17%"><div align="center">@user.dir</div>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC"><div align="center">instance</div>
    </td>
    <td><div align="center">yes</div></td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes (default)</div>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC"><div align="center">configuration</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes*</div>
    </td>
    <td><div align="center">yes*</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC"><div align="center">install</div>
    </td>
    <td><div align="center">no</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">no</div>
    </td>
    <td><div align="center">no</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC"><div align="center">user</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
    <td><div align="center">yes</div>
    </td>
  </tr>
</table>
<p>* indicates that this setup is technically possible but pragmatically quite
  difficult to manage. In particular, without a configuration location the Eclipse
  runtime may only get as far as starting the OSGi framework.</p>

<h3>Read-only Locations</h3>

<p>
A location may be specified as a read-only location by appending &quot;.readOnly&quot;
to the location property and setting it to the value &quot;true&quot;.  The following properties
can be used to specify their corresponding locations as read-only:</p>
    <ul type="disc">
      <li>
          osgi.configuration.area.readOnly <a href="#osgiconfigurationarea">osgi.configuration.area</a>
      </li>
      <li>
          osgi.sharedConfiguration.area.readOnly <a href="#osgisharedconfigurationarea">osgi.sharedConfiguration.area</a>
      </li>
      <li>
          osgi.instance.area.readOnly <a href="#osgiinstancearea">osgi.instance.area</a>
      </li>
      <li>
          osgi.user.area.readOnly <a href="#osgiuserarea">osgi.user.area</a>
      </li>
    </ul>
<h2><a name="variable.substitution"></a>Variable substitution in config.ini</h2>
<p>
The config.ini file located in the configuration area can be used to define configuration property values.
This file is a simple properties file with key=value pairs.  The values contained in the config.ini file may
optionally contain variables that can be substituted with the values of either system properties or environment
properties.  A variable which is to be substituted in the configuration value is surrounded by '$' characters.
For example, the following uses a windows environment variable LOCALAPPDATA to configure the instance area location:
</p>
<pre>    osgi.instance.area.default=$LOCALAPPDATA$/eclipse/workspace</pre>
<h2><a name="launcher"></a>Launcher ini file</h2>
<p>
The eclipse.exe and more generally executables for RCP applications now read their parameters from an associated
ini file. This file offers a platform independent way to pass in arguments that previously had to be specified directly on
the command line such as vm or vm arguments. Although all parameters can be specified in this file, it recommend for maintainability
and consistency across various installations to only specify the vm location and the vm arguments in this ini file and use the config.ini
file for others.</p>

<h3>File format</h3>
<p>This file must be named after the executable name (for example, eclipse.exe will read eclipse.ini, whereas launcher.exe will read launcher.ini) and every parameter
must be specified on a new line in the file. Here is an example of such a file specifying the vm location and some parameters:</p>
<pre>-vm
c:/myVm/java.exe
-vmargs
-Dms40M
</pre>
</body>
</html>
