platform-update-home/doc/eclipse_update_packaging.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12, Thu Jan 2 14:10:27 2003 UTC revision 1.13, Mon Jan 13 19:01:27 2003 UTC
# Line 31  Line 31 
31     </li>     </li>
32     <li><small>2.0.15</small>     <li><small>2.0.15</small>
33      <ul>      <ul>
34         <li><small>added &lt;site&gt;&lt;feature&gt; os,arch,nl,ws,patch tag</small></li>          <li><small>added &lt;site&gt;&lt;feature&gt; os,arch,nl,ws,patch
35    tag</small></li>
36    
37      </ul>      </ul>
38                         </li>                         </li>
# Line 80  Line 81 
81    
82    <ul>    <ul>
83       <li> <font size="-1">&lt;site&gt; &lt;feature&gt; changes - additional       <li> <font size="-1">&lt;site&gt; &lt;feature&gt; changes - additional
84   markup to optionally expose feature identification information to speed up    markup to optionally expose feature identification information to speed
85   searches</font></li>  up  searches</font></li>
86        <li> <font size="-1">removed obsolete text</font></li>        <li> <font size="-1">removed obsolete text</font></li>
87        <li> <font size="-1">web-triggered update not in 2.0</font></li>        <li> <font size="-1">web-triggered update not in 2.0</font></li>
88        <li> <font size="-1">no assist in 2.0 for license/ "key file" handling        <li> <font size="-1">no assist in 2.0 for license/ "key file" handling
# Line 116  Line 117 
117    
118    <ul>    <ul>
119       <li> <font size="-1">general text cleanup</font></li>       <li> <font size="-1">general text cleanup</font></li>
120        <li> <font size="-1">&lt;feature&gt;&lt;group&gt; support removed (will         <li> <font size="-1">&lt;feature&gt;&lt;group&gt; support removed
121    not be in Eclipse 2.0)</font></li>  (will   not be in Eclipse 2.0)</font></li>
122        <li> <font size="-1">arch= support added to &lt;feature&gt; and &lt;feature&gt;&lt;plugin&gt;</font></li>        <li> <font size="-1">arch= support added to &lt;feature&gt; and &lt;feature&gt;&lt;plugin&gt;</font></li>
123        <li> <font size="-1">os=/ arch=/ ws=/ nl= added to &lt;fetaure&gt;&lt;data&gt;</font></li>        <li> <font size="-1">os=/ arch=/ ws=/ nl= added to &lt;fetaure&gt;&lt;data&gt;</font></li>
124        <li> <font size="-1">&lt;site url=""&gt; new semantics</font></li>        <li> <font size="-1">&lt;site url=""&gt; new semantics</font></li>
# Line 183  Line 184 
184       This document outlines the support for managing the delivery of function       This document outlines the support for managing the delivery of function
185    within the Eclipse platform. Also refer to the "<a    within the Eclipse platform. Also refer to the "<a
186   href="http://www.eclipse.org/legal/updatemanager.html"> Eclipse.org Update   href="http://www.eclipse.org/legal/updatemanager.html"> Eclipse.org Update
187   Manager Agreement</a> " for additional legal information governing the use    Manager Agreement</a> " for additional legal information governing the
188   of the Eclipse update manager function.  use   of the Eclipse update manager function.
189  <h3> <a name="Changes_from_R1.0"></a> Changes from R1.0</h3>  <h3> <a name="Changes_from_R1.0"></a> Changes from R1.0</h3>
190       This section describes the major design changes from the R1.0 Installation       This section describes the major design changes from the R1.0 Installation
191    and Update support and supplies rationale for each design change.    and Update support and supplies rationale for each design change.
192    
193  <ul>  <ul>
194       <li> <b>extendable framework</b></li>       <li> <b>extendable framework</b></li>
195        <br>        <br>
# Line 197  Line 199 
199    <li>     <b>  feature support</b></li>    <li>     <b>  feature support</b></li>
200        <br>        <br>
201      In R2.0 the concept of a <i>component</i> and <i>configuration</i> is      In R2.0 the concept of a <i>component</i> and <i>configuration</i> is
202  merged  into <i>feature</i>. Features define the packaging structure for a   merged  into <i>feature</i>. Features define the packaging structure for
203  group of related plug-ins, plug-in fragments, and optionally non-plug-in files.  a group of related plug-ins, plug-in fragments, and optionally non-plug-in
204  Features are treated purely as an installation and packaging construct. They  files. Features are treated purely as an installation and packaging construct.
205  do not play a role during Eclipse plug-in execution. Features do not nest.  They do not play a role during Eclipse plug-in execution. Features do not
206  They are simply an inclusive "manifest" of the plug-ins, fragments and other  nest. They are simply an inclusive "manifest" of the plug-ins, fragments
207  files that make up that feature. If features are logically made up of plug-ins  and other files that make up that feature. If features are logically made
208  from "sub-features", the top-level feature "manifest" must be fully resolved  up of plug-ins from "sub-features", the top-level feature "manifest" must
209  at packaging time. <li> <b>default feature archive format</b></li>  be fully resolved at packaging time. <li> <b>default feature archive format</b></li>
210        <br>        <br>
211      R1.0 components were packaged as a single Java .jar containing the component      R1.0 components were packaged as a single Java .jar containing the component
212    manifest as well as the actual plug-in files. The problem with this approach    manifest as well as the actual plug-in files. The problem with this approach
# Line 215  Line 217 
217    <b>site map</b></li>    <b>site map</b></li>
218        <br>        <br>
219      Default Eclipse update server must contain a <i>site map</i> file (site.xml).      Default Eclipse update server must contain a <i>site map</i> file (site.xml).
220    This is an evolution of the R1.0 install.index support. The rationale for     This is an evolution of the R1.0 install.index support. The rationale
221    using a structured site defined by the map rather than a "free form" web  for    using a structured site defined by the map rather than a "free form"
222   site, is the ability to present a consistent installation experience for  web   site, is the ability to present a consistent installation experience
223  the user. Also, this provides the necessary structure for discovery of available  for  the user. Also, this provides the necessary structure for discovery
224   updates. Additional support for "free form" browsing may be considered in  of available   updates. Additional support for "free form" browsing may be
225   future work.    <li> <b>using native install/ uninstall</b></li>  considered in   future work.    <li> <b>using native install/ uninstall</b></li>
226        <br>        <br>
227      The primary mechanism for installing and updating Eclipse features is      The primary mechanism for installing and updating Eclipse features is
228  the  built-in installation and update support. Some products may instead choose   the  built-in installation and update support. Some products may instead
229   to use native installer technology (eg. MSI, RPM, etc) to deliver Eclipse  choose  to use native installer technology (eg. MSI, RPM, etc) to deliver
230   features. However, native installers do not implement the required support  Eclipse  features. However, native installers do not implement the required
231   for understanding the Eclipse installation structure. In particular, the  support  for understanding the Eclipse installation structure. In particular,
232  native uninstallers will, by default, remove plug-in files that were installed  the native uninstallers will, by default, remove plug-in files that were
233  using the native installer without regard to these plug-ins being needed  installed using the native installer without regard to these plug-ins being
234  by other features. As a result, features installed using native installers  needed by other features. As a result, features installed using native installers
235   must be written into private product-specific installation location and   must be written into private product-specific installation location and not
236  not  the shared Eclipse installation location. The shared Eclipse is made   the shared Eclipse installation location. The shared Eclipse is made aware
237  aware  of the produce-specific location via an installed "link file". <li>   of the produce-specific location via an installed "link file". <li>
238      <b>custom  install handling</b></li>      <b>custom  install handling</b></li>
239        <br>        <br>
240      In many cases the standard installation handling supplied by Eclipse      In many cases the standard installation handling supplied by Eclipse
241  is  not be sufficient to handle various custom requirements. To accommodate  is  not be sufficient to handle various custom requirements. To accommodate
242  this,  R2.0 Eclipse supports custom install handlers packaged as part of the   this,  R2.0 Eclipse supports custom install handlers packaged as part of
243  feature  and executed during the feature installation. <li> <b>path naming  the feature  and executed during the feature installation. <li> <b>path naming
244  conventions</b></li>  conventions</b></li>
245        <br>        <br>
246      R1.0 mandated the use of the various identifiers and versions inside      R1.0 mandated the use of the various identifiers and versions inside
# Line 247  Line 249 
249   no longer mandate that path names of packaged files precisely reflect the   no longer mandate that path names of packaged files precisely reflect the
250   contained identifiers and versions. The properly identified install subdirectories   contained identifiers and versions. The properly identified install subdirectories
251   are created by the Eclipse support during the installation and update process   are created by the Eclipse support during the installation and update process
252    based on the archive content (rather than explicit jar path structure set     based on the archive content (rather than explicit jar path structure
253    up at packaging time)  set    up at packaging time)
254  </ul>  </ul>
255    
256  <h3> <a name="Concepts"></a> Concepts</h3>  <h3> <a name="Concepts"></a> Concepts</h3>
257       <b>Plug-in</b> <br>       <b>Plug-in</b> <br>
258      Eclipse developers build plug-ins. Plug-ins are the base units of execution      Eclipse developers build plug-ins. Plug-ins are the base units of execution
259    recognized by the Eclipse runtime environment. In general, plug-ins are    recognized by the Eclipse runtime environment. In general, plug-ins are
260  not exposed to users that select function during installation or update. The   not exposed to users that select function during installation or update.
261  reason is that plug-in boundaries are established by developers for development  The reason is that plug-in boundaries are established by developers for development
262    reasons (like function reuse) and present the wrong level of granularity    reasons (like function reuse) and present the wrong level of granularity
263   in terms of what the user sees as the unit of function.   in terms of what the user sees as the unit of function.
264  <p>While plug-ins are being developed (ie. are frequently being changed),  <p>While plug-ins are being developed (ie. are frequently being changed),
# Line 264  Line 266 
266    This will generally depend on the particular development tool being used.    This will generally depend on the particular development tool being used.
267    Typically, however, the developer will likely setup the plug-in to execute    Typically, however, the developer will likely setup the plug-in to execute
268    from a directory tree containing exposed .class files, rather than executing    from a directory tree containing exposed .class files, rather than executing
269    from a .jar (requires an extra step to create the .jar and we all know developers     from a .jar (requires an extra step to create the .jar and we all know
270   hate extra steps). Also, at this stage the developer does not pay particular  developers  hate extra steps). Also, at this stage the developer does not
271   attention to plug-in versioning information, because the plug-in is continually  pay particular  attention to plug-in versioning information, because the
272   changing. </p>  plug-in is continually  changing. </p>
273    
274  <p>However, when the plug-in is ready to be packaged, it needs to be converted  <p>However, when the plug-in is ready to be packaged, it needs to be converted
275    to a form suitable for packaging and installation. Typically it means creation     to a form suitable for packaging and installation. Typically it means
276    of the runtime .jar(s) and removing any development-time files (source,  creation    of the runtime .jar(s) and removing any development-time files
277  exposed .class files, etc). It also means updating the plugin.xml manifest  (source,  exposed .class files, etc). It also means updating the plugin.xml
278  with the formal plug-in version and reflecting the version in the plug-in  manifest  with the formal plug-in version and reflecting the version in the
279  directory name (see "Concurrent Plug-In Version Support" for details). </p>  plug-in  directory name (see "Concurrent Plug-In Version Support" for details).
280    </p>
281    
282  <p><b>Plug-in Fragment</b> <br>  <p><b>Plug-in Fragment</b> <br>
283      Plug-in Fragments (or simply Fragments) allow independent packaging of       Plug-in Fragments (or simply Fragments) allow independent packaging
284   certain  aspects of the base plug-in. This includes (but may not be limited  of  certain  aspects of the base plug-in. This includes (but may not be limited
285   to) translated  resources for the plug-in, OS-specific or windowing-system-specific   to) translated  resources for the plug-in, OS-specific or windowing-system-specific
286   code.  At runtime, fragments are logically merged into the base plug-in.   code.  At runtime, fragments are logically merged into the base plug-in.
287  From a packaging point of view, the install and update support does not really  From a packaging point of view, the install and update support does not really
# Line 287  Line 290 
290  <p><b>Feature</b> <br>  <p><b>Feature</b> <br>
291      A feature is an installation packaging mechanism used to define a group      A feature is an installation packaging mechanism used to define a group
292   of versioned plug-ins and/or plug-in fragments plus non-plug-in files that   of versioned plug-ins and/or plug-in fragments plus non-plug-in files that
293   is used to deliver some user function. A feature can also include other features.    is used to deliver some user function. A feature can also include other
294   Features are exposed to users as part of the packaging and installation  features.  Features are exposed to users as part of the packaging and installation
295   process,  because they represent a unit of function selection. Features   process,  because they represent a unit of function selection. Features also
296  also  represent  a unit of installation. Features carry a version identifier.</p>   represent  a unit of installation. Features carry a version identifier.</p>
297    
298  <p>Features are packaged as a feature archive, referencing the required plug-ins,  <p>Features are packaged as a feature archive, referencing the required plug-ins,
299    plug-in fragments and optional non-plug-in files. The feature archives    plug-in fragments and optional non-plug-in files. The feature archives are
300  are   placed on an update server for download and installation by the Eclipse    placed on an update server for download and installation by the Eclipse
301  update  manager, or they can be used as the input into a formal packaging  update  manager, or they can be used as the input into a formal packaging
302  process  using one of the "traditional" installer technologies. The format  process  using one of the "traditional" installer technologies. The format
303  of the feature archive is described later. </p>  of the feature archive is described later. </p>
304    
305  <h3> <a name="Framework"></a> Framework</h3>  <h3> <a name="Framework"></a> Framework</h3>
306       The 2.0 installation and update support is provided as a framework that        The 2.0 installation and update support is provided as a framework
307   allows custom implementations to be supplied for its key elements. In particular,  that   allows custom implementations to be supplied for its key elements.
308    the following can be supplied:  In particular,    the following can be supplied:
309  <ul>  <ul>
310       <li> concrete implementations of feature (IFeature interface) that can        <li> concrete implementations of feature (IFeature interface) that
311   be used to support alternate packaging schemes. New concrete feature types  can   be used to support alternate packaging schemes. New concrete feature
312   are  registere via the "org.eclipse.update.featureTypes" extension point.</li>  types   are  registere via the "org.eclipse.update.featureTypes" extension
313    point.</li>
314        <li> concrete implementations of site (ISite interface) that can be        <li> concrete implementations of site (ISite interface) that can be
315  used  to support alternate site layout, or site behavior. New concrete site  used  to support alternate site layout, or site behavior. New concrete site
316  types   are registered via the "org.eclipse.update.siteTypes" extension point.</li>   types   are registered via the "org.eclipse.update.siteTypes" extension
317        <li> each feature can specify a custom install handler as part of its  point.</li>
318   feature  manifest. Install handlers (IInstallHandler interface) are dynamically         <li> each feature can specify a custom install handler as part of
319   invoked as part of the installation process to handle non-plugin data, plus  its   feature  manifest. Install handlers (IInstallHandler interface) are
320   perform other custom processing allowed by the framework.</li>  dynamically   invoked as part of the installation process to handle non-plugin
321    data, plus   perform other custom processing allowed by the framework.</li>
322    
323  </ul>  </ul>
324       Eclipse provides default implementations of feature and site. These       Eclipse provides default implementations of feature and site. These
# Line 325  Line 330 
330       <td><b>Note: <i>The reminder of this document describes the default       <td><b>Note: <i>The reminder of this document describes the default
331  concrete   implementation of the framework delivered with Eclipse. It specifies  concrete   implementation of the framework delivered with Eclipse. It specifies
332  the  structure of the default feature implementation, as well as the default  the  structure of the default feature implementation, as well as the default
333  site  implementation, plus the corresponding xml files (feature.xml and site.xml).   site  implementation, plus the corresponding xml files (feature.xml and
334   Providers of alternate concrete implementations can extend&nbsp; parts or  site.xml).   Providers of alternate concrete implementations can extend&nbsp;
335   all of the default Eclipse implementation. This includes providing a mechanism  parts or   all of the default Eclipse implementation. This includes providing
336   for dynamic computation of the site map (site.xml)</i></b></td>  a mechanism   for dynamic computation of the site map (site.xml)</i></b></td>
337       </tr>       </tr>
338    
339    </tbody>    </tbody>
# Line 339  Line 344 
344  <ul>  <ul>
345       <li> exactly one jar containing the feature manifest and related files.       <li> exactly one jar containing the feature manifest and related files.
346    This one is refered to as the "<b>feature archive</b>"</li>    This one is refered to as the "<b>feature archive</b>"</li>
347        <li> zero or more jars containing the feature plug-ins. These are refered         <li> zero or more jars containing the feature plug-ins. These are
348    to as the "<b>plug-in archives</b>"</li>  refered   to as the "<b>plug-in archives</b>"</li>
349        <li> zero or more non-plug-in files associated with the feature. They        <li> zero or more non-plug-in files associated with the feature. They
350   are used by feature custom install handlers and contain data not interpreted   are used by feature custom install handlers and contain data not interpreted
351    by Eclipse</li>    by Eclipse</li>
# Line 386  Line 391 
391    
392  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>
393    
394  <p><tt>&lt;!ELEMENT feature (install-handler?, description?, copyright?, license?,  <p><tt>&lt;!ELEMENT feature (install-handler?, description?, copyright?,
395  url?, includes*, requires?, plugin*, data*)&gt;</tt> <br>  license?, url?, includes*, requires?, plugin*, data*)&gt;</tt> <br>
396      <tt>&lt;!ATTLIST feature</tt> <br>      <tt>&lt;!ATTLIST feature</tt> <br>
397      <tt>&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
398    CDATA #REQUIRED</tt> <br>    CDATA #REQUIRED</tt> <br>
# Line 481  Line 486 
486      <tt>&lt;!ATTLIST import</tt> <br>      <tt>&lt;!ATTLIST import</tt> <br>
487      <tt>&nbsp;&nbsp;&nbsp; plugin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; plugin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
488   CDATA #IMPLIED</tt><br>   CDATA #IMPLIED</tt><br>
489      <tt>&nbsp;&nbsp;&nbsp; feature &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA #IMPLIED</tt><br>       <tt>&nbsp;&nbsp;&nbsp; feature &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA
490    #IMPLIED</tt><br>
491      <tt>&nbsp;&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA      <tt>&nbsp;&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA
492    #IMPLIED</tt> <br>    #IMPLIED</tt> <br>
493      <tt>&nbsp;&nbsp;&nbsp; match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# Line 497  Line 503 
503    CDATA #REQUIRED</tt> <br>    CDATA #REQUIRED</tt> <br>
504      <tt>&nbsp;&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA      <tt>&nbsp;&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDATA
505    #REQUIRED</tt> <br>    #REQUIRED</tt> <br>
506      <tt>&nbsp;&nbsp;&nbsp; fragment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (true |       <tt>&nbsp;&nbsp;&nbsp; fragment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (true
507  false)  "false"</tt> <br>  |  false)  "false"</tt> <br>
508      <tt>&nbsp;&nbsp;&nbsp; os&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; os&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
509    CDATA #IMPLIED</tt> <br>    CDATA #IMPLIED</tt> <br>
510      <tt>&nbsp;&nbsp;&nbsp; arch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; arch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# Line 544  Line 550 
550   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
551    . Indicates this feature should only be installed on one of the specified    . Indicates this feature should only be installed on one of the specified
552    os systems. If this attribute is not specified, the feature can be installed    os systems. If this attribute is not specified, the feature can be installed
553    on all systems (portable implementation). This information is used as a     on all systems (portable implementation). This information is used as
554  hint by the installation and update support (user can force installation of  a  hint by the installation and update support (user can force installation
555  feature regardless of this setting).</li>  of feature regardless of this setting).</li>
556        <li> arch - optional machine architecture specification. A comma-separated        <li> arch - optional machine architecture specification. A comma-separated
557    list of architecture designators defined by Eclipse (see Javadoc for <tt>    list of architecture designators defined by Eclipse (see Javadoc for <tt>
558    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only
559    be installed on one of the specified systems. If this attribute is not    be installed on one of the specified systems. If this attribute is not specified,
560  specified,   the feature can be installed on all systems (portable implementation).    the feature can be installed on all systems (portable implementation). This
561  This   information is used as a hint by the installation and update support    information is used as a hint by the installation and update support (user
562  (user   can force installation of feature regardless of this setting).</li>    can force installation of feature regardless of this setting).</li>
563        <li> ws - optional windowing system specification. A comma-separated        <li> ws - optional windowing system specification. A comma-separated
564   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
565    . Indicates this feature should only be installed on one of the specified    . Indicates this feature should only be installed on one of the specified
566    ws systems. If this attribute is not specified, the feature can be installed    ws systems. If this attribute is not specified, the feature can be installed
567    on all systems (portable implementation). This information is used as a     on all systems (portable implementation). This information is used as
568  hint by the installation and update support (user can force installation of  a  hint by the installation and update support (user can force installation
569  feature regardless of this setting).</li>  of feature regardless of this setting).</li>
570        <li> nl - optional locale specification. A comma-separated list of        <li> nl - optional locale specification. A comma-separated list of
571  locale   designators defined by Java. Indicates this feature should only  locale   designators defined by Java. Indicates this feature should only be
572  be installed   on a system running with a compatible locale (using Java locale-matching  installed   on a system running with a compatible locale (using Java locale-matching
573   rules). If this attribute is not specified, the feature can be installed   rules). If this attribute is not specified, the feature can be installed
574  on all systems (language-neutral implementation). This information is used  on all systems (language-neutral implementation). This information is used
575  as a hint by the installation and update support (user can force installation  as a hint by the installation and update support (user can force installation
# Line 576  Line 582 
582        <li> primary - optional indication specifying whether this feature        <li> primary - optional indication specifying whether this feature
583  can   be used as a <a href="#Dominant_Feature">primary feature</a> . Default  can   be used as a <a href="#Dominant_Feature">primary feature</a> . Default
584  if        <i>false</i> (not a primary feature).</li>  if        <i>false</i> (not a primary feature).</li>
585        <li> application - optional identifier of the Eclipse application that         <li> application - optional identifier of the Eclipse application
586    is to be used during startup when the declaring feature is the <a  that   is to be used during startup when the declaring feature is the <a
587   href="#Dominant_Feature"> primary feature</a> . The application identifier   href="#Dominant_Feature"> primary feature</a> . The application identifier
588   must represent a valid application registered in the <tt>org.eclipse.core.runtime.applications</tt>   must represent a valid application registered in the <tt>org.eclipse.core.runtime.applications</tt>
589   extension point. Default is <tt>org.eclipse.ui.workbench</tt>.</li>   extension point. Default is <tt>org.eclipse.ui.workbench</tt>.</li>
# Line 589  Line 595 
595       <li> library - optional .jar library containing the install handler       <li> library - optional .jar library containing the install handler
596  classes.   If specified, the referenced .jar must be contained in the feature  classes.   If specified, the referenced .jar must be contained in the feature
597  archive.   It is specified as a path within the feature archive, relative  archive.   It is specified as a path within the feature archive, relative
598  to the feature.xml   entry. If not specified, the feature archive itself  to the feature.xml   entry. If not specified, the feature archive itself is
599  is used to load the install handler classes. This attribute is only interpreted  used to load the install handler classes. This attribute is only interpreted
600  if <i>class</i> attribute is also specified</li>  if <i>class</i> attribute is also specified</li>
601        <li> handler - optional identifier of the install handler. The value        <li> handler - optional identifier of the install handler. The value
602   is  interpreted depending on the value of the <i>library</i> attribute.   is  interpreted depending on the value of the <i>library</i> attribute. If
603  If        <i>  library</i> is specified,&nbsp; the value is interpreted as         <i>  library</i> is specified,&nbsp; the value is interpreted as a
604  a fully qualified  name of a class contained in the specified <i>library</i>.  fully qualified  name of a class contained in the specified <i>library</i>.
605  If       <i>library</i>   is not specified, the value is is interpreted as  If       <i>library</i>   is not specified, the value is is interpreted as
606  an extension identifier  of an extension registered in the <i>org.eclipse.update.installHandlers</i>  an extension identifier  of an extension registered in the <i>org.eclipse.update.installHandlers</i>
607     extension point. In either case, the resulting class must implement the     extension point. In either case, the resulting class must implement the
608         <i> IInstallHandler</i> interface. The class is dynamically loaded         <i> IInstallHandler</i> interface. The class is dynamically loaded
609  and called at specific points during feature processing. The handler has visibility   and called at specific points during feature processing. The handler has
610  to the API classes from the update plug-in, and Eclipse plug-ins required  visibility to the API classes from the update plug-in, and Eclipse plug-ins
611  by the update plugin.</li>  required by the update plugin.</li>
612    
613    </ul>    </ul>
614        <li> &lt;description&gt; - brief component description as simple text.        <li> &lt;description&gt; - brief component description as simple text.
# Line 610  Line 616 
616    
617    <ul>    <ul>
618       <li> url - optional URL for the full description as HTML. The URL can       <li> url - optional URL for the full description as HTML. The URL can
619   be  specified as absolute of relative. If relative, it is assumed to be   be  specified as absolute of relative. If relative, it is assumed to be relative
620  relative   to (and packaged in) the feature archive. Note, that for NL handling    to (and packaged in) the feature archive. Note, that for NL handling the
621  the  URL value should be separated to allow alternate URLs to be specified   URL value should be separated to allow alternate URLs to be specified for
622  for  each national language.</li>   each national language.</li>
623    
624    </ul>    </ul>
625        <li> &lt;copyright&gt; - feature copyright as simple text. Intended        <li> &lt;copyright&gt; - feature copyright as simple text. Intended
# Line 621  Line 627 
627    
628    <ul>    <ul>
629       <li> url - optional URL for the full description as HTML. The URL can       <li> url - optional URL for the full description as HTML. The URL can
630   be  specified as absolute of relative. If relative, it is assumed to be   be  specified as absolute of relative. If relative, it is assumed to be relative
631  relative   to (and packaged in) the feature archive. Note, that for NL handling    to (and packaged in) the feature archive. Note, that for NL handling the
632  the  URL value should be separated to allow alternate URLs to be specified   URL value should be separated to allow alternate URLs to be specified for
633  for  each national language.</li>   each national language.</li>
634    
635    </ul>    </ul>
636        <li> &lt;license&gt; - feature "click-through" license as simple text.        <li> &lt;license&gt; - feature "click-through" license as simple text.
637    Intended to be translated. It is displayed in a standard dialog with [Accept]    Intended to be translated. It is displayed in a standard dialog with [Accept]
638    [Reject] actions during the download/ installation process. Note, that    [Reject] actions during the download/ installation process. Note, that click-through
639  click-through   license must be specified for any feature that will be selected    license must be specified for any feature that will be selected for installation
640  for installation   or update using the Eclipse update manager. When using    or update using the Eclipse update manager. When using nested features,
641  nested features, only the nesting parent (ie. the feature selected for installation  only the nesting parent (ie. the feature selected for installation or update)
642  or update) must have click-through license text defined. The license text  must have click-through license text defined. The license text is required
643  is required even if the optional <i>url</i> attribute is specified.</li>  even if the optional <i>url</i> attribute is specified.</li>
644    
645    <ul>    <ul>
646       <li> url - optional URL for the full description as HTML. The URL can       <li> url - optional URL for the full description as HTML. The URL can
647   be  specified as absolute of relative. If relative, it is assumed to be   be  specified as absolute of relative. If relative, it is assumed to be relative
648  relative   to (and packaged in) the feature archive. Note, that for NL handling    to (and packaged in) the feature archive. Note, that for NL handling the
649  the  URL value should be separated to allow alternate URLs to be specified   URL value should be separated to allow alternate URLs to be specified for
650  for  each national language. Note, that the "content" of this URL is <b>not</b>   each national language. Note, that the "content" of this URL is <b>not</b>
651    what is presented as the click-through license during installation processing.    what is presented as the click-through license during installation processing.
652    The click-through license is the actual value of the <i>&lt;license&gt;</i>    The click-through license is the actual value of the <i>&lt;license&gt;</i>
653     element (eg. <tt>&lt;license&gt;click through text&lt;/license&gt;</tt>)</li>     element (eg. <tt>&lt;license&gt;click through text&lt;/license&gt;</tt>)</li>
# Line 686  Line 692 
692    the 2.0.1 behavior) requires that the feature has exactly the version specified    the 2.0.1 behavior) requires that the feature has exactly the version specified
693    by the version attribute. Other choices progressively relax the rule (<samp>    by the version attribute. Other choices progressively relax the rule (<samp>
694    equivalent</samp> allows only service part of the version to be more recent,    equivalent</samp> allows only service part of the version to be more recent,
695          <samp>compatible</samp> also allows minor part to be included in          <samp>compatible</samp> also allows minor part to be included in the
696  the   consideration, while <samp>greaterOrEqual</samp> simply allows any    consideration, while <samp>greaterOrEqual</samp> simply allows any version
697  version   that is more recent or identical to the one specified).</li>    that is more recent or identical to the one specified).</li>
698          <li>search_location&nbsp; - optional. Indicates whether the "New          <li>search_location&nbsp; - optional. Indicates whether the "New
699  Updates"   action should search the update location determined by the nesting  Updates"   action should search the update location determined by the nesting
700  root feature  (<tt>root</tt>, is the default), or the location defined by  root feature  (<tt>root</tt>, is the default), or the location defined by
# Line 706  Line 712 
712    
713      <ul>      <ul>
714       <li> plugin - identifier of dependent plug-in.</li>       <li> plugin - identifier of dependent plug-in.</li>
715            <li> feature - identifier of dependent feature. If plugin and feature             <li> feature - identifier of dependent feature. If plugin and
716    are specified, plugin takes precedence upon feature. Feature or plugin  feature   are specified, plugin takes precedence upon feature. Feature or
717  must   be specified.</li>  plugin must   be specified.</li>
718        <li> version - optional plug-in/feature version specification</li>        <li> version - optional plug-in/feature version specification</li>
719            <li>patch - optional specification indicating if this feature is             <li>patch - optional specification indicating if this feature
720   a  patch of the dependant feature. Default is "false". If patch is true,  is  a  patch of the dependant feature. Default is "false". If patch is true,
721  version  must be specified. If patch is true, only feature must be specified.  version  must be specified. If patch is true, only feature must be specified.
722  If patch  is true, and match is specified, it must be 'perfect'.<br>  If patch  is true, and match is specified, it must be 'perfect'.<br>
723            </li>            </li>
# Line 726  Line 732 
732              <li>if patch is true, and match is not specified, match defaults              <li>if patch is true, and match is not specified, match defaults
733    to perfect.<br>    to perfect.<br>
734              </li>              </li>
735        <li> <b><i>perfect</i></b> - dependent plug-in version must match exactly         <li> <b><i>perfect</i></b> - dependent plug-in version must match
736    the specified version.</li>  exactly   the specified version.</li>
737        <li> <b><i>equivalent</i></b> - dependent plug-in version must be at         <li> <b><i>equivalent</i></b> - dependent plug-in version must be
738   least  at the version specified, or at a higher service level (major and  at  least  at the version specified, or at a higher service level (major
739  minor version  levels must equal the specified version).</li>  and minor version  levels must equal the specified version).</li>
740        <li> <b><i>compatible</i></b> - dependent plug-in version must be at         <li> <b><i>compatible</i></b> - dependent plug-in version must be
741   least  at the version specified, or at a higher service level or minor level  at  least  at the version specified, or at a higher service level or minor
742   (major  version level must equal the specified version).</li>  level  (major  version level must equal the specified version).</li>
743        <li> <b><i>greaterOrEqual</i></b> - dependent plug-in version must        <li> <b><i>greaterOrEqual</i></b> - dependent plug-in version must
744  be  at least at the version specified, or at a higher service, minor or major  be  at least at the version specified, or at a higher service, minor or major
745   level.</li>   level.</li>
# Line 754  Line 760 
760   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
761    . Indicates this entry should only be installed on one of the specified    . Indicates this entry should only be installed on one of the specified
762  os  systems. If this attribute is not specified, the entry can be installed  os  systems. If this attribute is not specified, the entry can be installed
763   on all systems (portable implementation). This information is used as a hint    on all systems (portable implementation). This information is used as a
764   by the installation and update support (user can force installation of entry  hint  by the installation and update support (user can force installation
765   regardless of this setting).</li>  of entry  regardless of this setting).</li>
766        <li> arch - optional machine architecture specification. A comma-separated        <li> arch - optional machine architecture specification. A comma-separated
767    list of architecture designators defined by Eclipse (see Javadoc for <tt>    list of architecture designators defined by Eclipse (see Javadoc for <tt>
768    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only
769    be installed on one of the specified systems. If this attribute is not    be installed on one of the specified systems. If this attribute is not specified,
770  specified,   the feature can be installed on all systems (portable implementation).    the feature can be installed on all systems (portable implementation). This
771  This   information is used as a hint by the installation and update support    information is used as a hint by the installation and update support (user
772  (user   can force installation of feature regardless of this setting).</li>    can force installation of feature regardless of this setting).</li>
773        <li> ws - optional windowing system specification. A comma-separated        <li> ws - optional windowing system specification. A comma-separated
774   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
775    . Indicates this entry should only be installed on one of the specified    . Indicates this entry should only be installed on one of the specified
776  ws  systems. If this attribute is not specified, the entry can be installed  ws  systems. If this attribute is not specified, the entry can be installed
777   on all systems (portable implementation). This information is used as a hint    on all systems (portable implementation). This information is used as a
778   by the installation and update support (user can force installation of entry  hint  by the installation and update support (user can force installation
779   regardless of this setting).</li>  of entry  regardless of this setting).</li>
780        <li> nl - optional locale specification. A comma-separated list of        <li> nl - optional locale specification. A comma-separated list of
781  locale   designators defined by Java. Indicates this entry should only be  locale   designators defined by Java. Indicates this entry should only be
782  installed   on a system running with a compatible locale (using Java locale-matching  installed   on a system running with a compatible locale (using Java locale-matching
783   rules). If this attribute is not specified, the entry can be installed on   rules). If this attribute is not specified, the entry can be installed on
784   all systems (language-neutral implementation). This information is used   all systems (language-neutral implementation). This information is used as
785  as  a hint by the installation and update support (user can force installation   a hint by the installation and update support (user can force installation
786   of entry regardless of this setting).</li>   of entry regardless of this setting).</li>
787        <li> download-size - optional hint supplied by the feature packager,        <li> download-size - optional hint supplied by the feature packager,
788   indicating  the download size in KBytes of the referenced plug-in archive.   indicating  the download size in KBytes of the referenced plug-in archive.
# Line 788  Line 794 
794  the implementation   needs to distinguish between "not known" and 0 size)</li>  the implementation   needs to distinguish between "not known" and 0 size)</li>
795    
796    </ul>    </ul>
797        <li> &lt;data&gt; - identifies non-plugin data that is part of the         <li> &lt;data&gt; - identifies non-plugin and non-feature data that
798  feature</li>  is part of the feature. Generally, data are post-install processed using
799    feature Install handler. Feature files like feature.properties are not considered
800    data.</li>
801    
802    <ul>    <ul>
803       <li> id - required data identifier in the form of a relative path.</li>       <li> id - required data identifier in the form of a relative path.</li>
# Line 797  Line 805 
805   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
806    . Indicates this entry should only be installed on one of the specified    . Indicates this entry should only be installed on one of the specified
807  os  systems. If this attribute is not specified, the entry can be installed  os  systems. If this attribute is not specified, the entry can be installed
808   on all systems (portable implementation). This information is used as a hint    on all systems (portable implementation). This information is used as a
809   by the installation and update support (user can force installation of entry  hint  by the installation and update support (user can force installation
810   regardless of this setting).</li>  of entry  regardless of this setting).</li>
811        <li> arch - optional machine architecture specification. A comma-separated        <li> arch - optional machine architecture specification. A comma-separated
812    list of architecture designators defined by Eclipse (see Javadoc for <tt>    list of architecture designators defined by Eclipse (see Javadoc for <tt>
813    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only    org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature should only
814    be installed on one of the specified systems. If this attribute is not    be installed on one of the specified systems. If this attribute is not specified,
815  specified,   the feature can be installed on all systems (portable implementation).    the feature can be installed on all systems (portable implementation). This
816  This   information is used as a hint by the installation and update support    information is used as a hint by the installation and update support (user
817  (user   can force installation of feature regardless of this setting).</li>    can force installation of feature regardless of this setting).</li>
818        <li> ws - optional windowing system specification. A comma-separated        <li> ws - optional windowing system specification. A comma-separated
819   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
820    . Indicates this entry should only be installed on one of the specified    . Indicates this entry should only be installed on one of the specified
821  ws  systems. If this attribute is not specified, the entry can be installed  ws  systems. If this attribute is not specified, the entry can be installed
822   on all systems (portable implementation). This information is used as a hint    on all systems (portable implementation). This information is used as a
823   by the installation and update support (user can force installation of entry  hint  by the installation and update support (user can force installation
824   regardless of this setting).</li>  of entry  regardless of this setting).</li>
825        <li> nl - optional locale specification. A comma-separated list of        <li> nl - optional locale specification. A comma-separated list of
826  locale   designators defined by Java. Indicates this entry should only be  locale   designators defined by Java. Indicates this entry should only be
827  installed   on a system running with a compatible locale (using Java locale-matching  installed   on a system running with a compatible locale (using Java locale-matching
828   rules). If this attribute is not specified, the entry can be installed on   rules). If this attribute is not specified, the entry can be installed on
829   all systems (language-neutral implementation). This information is used   all systems (language-neutral implementation). This information is used as
830  as  a hint by the installation and update support (user can force installation   a hint by the installation and update support (user can force installation
831   of entry regardless of this setting).</li>   of entry regardless of this setting).</li>
832        <li> download-size - optional hint supplied by the feature packager,        <li> download-size - optional hint supplied by the feature packager,
833   indicating  the download size in KBytes of the referenced data archive.   indicating  the download size in KBytes of the referenced data archive. If
834  If  not specified,  the download size is not known (<b>Implementation Note:</b>   not specified,  the download size is not known (<b>Implementation Note:</b>
835   the implementation  needs to distinguish between "not known" and 0 size)</li>   the implementation  needs to distinguish between "not known" and 0 size)</li>
836        <li> install-size - optional hint supplied by the feature packager,        <li> install-size - optional hint supplied by the feature packager,
837  indicating   the install size in KBytes of the referenced data archive. If   indicating   the install size in KBytes of the referenced data archive.
838  not specified,   the install size is not known (<b>Implementation Note:</b>  If  not specified,   the install size is not known (<b>Implementation Note:</b>
839  the implementation   needs to distinguish between "not known" and 0 size)</li>  the implementation   needs to distinguish between "not known" and 0 size)</li>
840    
841    </ul>    </ul>
842    
843  </ul>  </ul>
844       <a name="Feature_Archive_Mapping_Id_To_Path"></a> When interacting with        <a name="Feature_Archive_Mapping_Id_To_Path"></a> When interacting
845   the update site, the feature implementation maps the <tt>&lt;plugin&gt;</tt>  with   the update site, the feature implementation maps the <tt>&lt;plugin&gt;</tt>
846   and <tt>&lt;data&gt;</tt> elements into path identifiers used by the site   and <tt>&lt;data&gt;</tt> elements into path identifiers used by the site
847   to determine the actual files to download and install. The default feature   to determine the actual files to download and install. The default feature
848   implementation supplied by Eclipse constructs the path identifiers as follows:   implementation supplied by Eclipse constructs the path identifiers as follows:
# Line 843  Line 851 
851       <li> <tt>&lt;plugin&gt;</tt> element results in a path entry in the       <li> <tt>&lt;plugin&gt;</tt> element results in a path entry in the
852  form   "<tt>plugins/&lt;pluginId&gt;_&lt;pluginVersion&gt;.jar</tt>" (for  form   "<tt>plugins/&lt;pluginId&gt;_&lt;pluginVersion&gt;.jar</tt>" (for
853  example,   "<tt>plugins/org.eclipse.core.boot_1.0.3.jar</tt>")</li>  example,   "<tt>plugins/org.eclipse.core.boot_1.0.3.jar</tt>")</li>
854        <li> <tt>&lt;data&gt;</tt> element results in a path entry in the form         <li> <tt>&lt;data&gt;</tt> element results in a path entry in the
855    "<tt>features/&lt;featureId&gt;_&lt;featureVersion&gt;/&lt;dataId&gt;</tt>  form   "<tt>features/&lt;featureId&gt;_&lt;featureVersion&gt;/&lt;dataId&gt;</tt>
856    " (for example, "f<tt>eatures/com.xyz.tools_2.3.1/examples.zip</tt>")</li>    " (for example, "f<tt>eatures/com.xyz.tools_2.3.1/examples.zip</tt>")</li>
857    
858  </ul>  </ul>
# Line 853  Line 861 
861  <p><tt>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</tt> </p>  <p><tt>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</tt> </p>
862    
863  <p>Translatable text contained in the feature.xml can be separated into feature&lt;_locale&gt;.properties  <p>Translatable text contained in the feature.xml can be separated into feature&lt;_locale&gt;.properties
864    files using Java property bundle conventions. Note that the translated    files using Java property bundle conventions. Note that the translated strings
865  strings   are used at installation time (ie. do not employ the plug-in fragment    are used at installation time (ie. do not employ the plug-in fragment runtime
866  runtime   mechanism). </p>    mechanism). </p>
867    
868  <h3> <a name="Plug-In_Archive"></a> Plug-In Archive</h3>  <h3> <a name="Plug-In_Archive"></a> Plug-In Archive</h3>
869       Plug-ins and plug-in fragments are individually packaged as separate       Plug-ins and plug-in fragments are individually packaged as separate
# Line 867  Line 875 
875    
876  <p>Where <tt>&lt;id&gt;</tt> is the plug-in or fragment identifier and <tt>  <p>Where <tt>&lt;id&gt;</tt> is the plug-in or fragment identifier and <tt>
877    &lt;version&gt;</tt> is the full version identifier contained in the respective    &lt;version&gt;</tt> is the full version identifier contained in the respective
878    plugin.xml or fragment.xml. Note that this is a recommended convention    plugin.xml or fragment.xml. Note that this is a recommended convention that
879  that   minimizes chance of collisions, but is not required by the Eclipse    minimizes chance of collisions, but is not required by the Eclipse architecture.
880  architecture.   For example, the following are valid plug-in archive names    For example, the following are valid plug-in archive names </p>
 </p>  
881    
882  <p><tt>org.eclipse.platform_1.0.3.jar</tt> <br>  <p><tt>org.eclipse.platform_1.0.3.jar</tt> <br>
883      <tt>org.eclipse.ui.nl_2.0.jar</tt> <br>      <tt>org.eclipse.ui.nl_2.0.jar</tt> <br>
884      <tt>my_plugin.jar</tt> </p>      <tt>my_plugin.jar</tt> </p>
885    
886  <p>Internally, each plug-in archive packages all the relevant plug-in or fragment  <p>Internally, each plug-in archive packages all the relevant plug-in or
887  files relative to its plug-in or fragment directory (but not including the  fragment files relative to its plug-in or fragment directory (but not including
888  directory path element). The archive has the following structure </p>  the directory path element). The archive has the following structure </p>
889    
890  <p><tt>plugin.xml *OR* fragment.xml</tt> <br>  <p><tt>plugin.xml *OR* fragment.xml</tt> <br>
891      <tt>other plug-in or feature files and subdirectories</tt> <br>      <tt>other plug-in or feature files and subdirectories</tt> <br>
# Line 892  Line 899 
899    to be added to the runtime without the need to repackage the base plug-ins.    to be added to the runtime without the need to repackage the base plug-ins.
900    
901  <p>This mechanism cannot be used for translating the actual packaging information  <p>This mechanism cannot be used for translating the actual packaging information
902    that is part of the installation xml files. Consequently the standard Java     that is part of the installation xml files. Consequently the standard
903    translation conventions are used for the packaging information, and all  Java    translation conventions are used for the packaging information, and
904  necessary translations must be available at the time the feature is packaged.  all  necessary translations must be available at the time the feature is
905  </p>  packaged.  </p>
906    
907  <h4> <a name="Translated_Feature_Information"></a> Translated Feature Information</h4>  <h4> <a name="Translated_Feature_Information"></a> Translated Feature Information</h4>
908       <b>Note:</b> This section describes the conventions used for translating       <b>Note:</b> This section describes the conventions used for translating
909    the information contained within the feature manifest. It allows for the    the information contained within the feature manifest. It allows for the
910   update client to select the correctly localized strings from the update server.    update client to select the correctly localized strings from the update
911   This section specifically does not describe localization of individual plug-ins.  server.  This section specifically does not describe localization of individual
912    plug-ins.
913  <p>Several of the attributes within the feature manifest are strings intended  <p>Several of the attributes within the feature manifest are strings intended
914    for display through user interfaces. To facilitate translation, these attribute     for display through user interfaces. To facilitate translation, these
915    values use the convention defined for translatable attributes of plugin.xml.  attribute    values use the convention defined for translatable attributes
916    Strings beginning with % up to the first space are treated as resource identifier  of plugin.xml.    Strings beginning with % up to the first space are treated
917   keys (without the %) and looked up in a properties file. For example </p>  as resource identifier  keys (without the %) and looked up in a properties
918    file. For example </p>
919    
920  <p><tt>label="%cfg Tool Feature for Linux"</tt> </p>  <p><tt>label="%cfg Tool Feature for Linux"</tt> </p>
921    
922  <p>results in a resource lookup in the correct property file with key "cfg".  <p>results in a resource lookup in the correct property file with key "cfg".
923    If no property files are supplied, or the key is not found the default string     If no property files are supplied, or the key is not found the default
924   value (following the %key) is used. </p>  string  value (following the %key) is used. </p>
925    
926  <p>The property files are named as feature_&lt;locale&gt;.properties using  <p>The property files are named as feature_&lt;locale&gt;.properties using
927    the Java resource bundle naming conventions. Within the feature archive    the Java resource bundle naming conventions. Within the feature archive
# Line 948  Line 956 
956       This topic is covered in separate documents available on the eclipse.org       This topic is covered in separate documents available on the eclipse.org
957    development resources page of the Update component.    development resources page of the Update component.
958  <h3> <a name="Packaging_Non_Plug_In_Files"></a> Packaging Non-Plug-In Files</h3>  <h3> <a name="Packaging_Non_Plug_In_Files"></a> Packaging Non-Plug-In Files</h3>
959       Arbitrary non-plug-in files can be included as part of the feature definition        Arbitrary non-plug-in files can be included as part of the feature
960    using the <tt>&lt;data&gt;</tt> elements. Non-plug-in files typically also  definition    using the <tt>&lt;data&gt;</tt> elements. Non-plug-in files
961    requires specification of a custom install handler. In general, the Eclipse  typically also    requires specification of a custom install handler. In
962    support only downloads the referenced non-plug-in files and calls the custom  general, the Eclipse    support only downloads the referenced non-plug-in
963    install handler to perform any actual installation steps.  files and calls the custom    install handler to perform any actual installation
964    steps.
965  <p>Eclipse does not specify the format of the non-plug-in files. </p>  <p>Eclipse does not specify the format of the non-plug-in files. </p>
966    
967  <h3> <a name="Custom_Install_Handling"></a> Custom Install Handling</h3>  <h3> <a name="Custom_Install_Handling"></a> Custom Install Handling</h3>
# Line 963  Line 972 
972   <tt>IInstallHandler</tt>). When required, the install handler is dynamically   <tt>IInstallHandler</tt>). When required, the install handler is dynamically
973   loaded by the installation and update code, and is called at specific points   loaded by the installation and update code, and is called at specific points
974   during its processing. The install handler code has visibility to classes   during its processing. The install handler code has visibility to classes
975   from the installation and update support plug-in, and its prerequisite plug-ins.    from the installation and update support plug-in, and its prerequisite
976    plug-ins.
977  <p><b>Implementation Note:</b> the detailed list of visible prerequisite plug-ins  <p><b>Implementation Note:</b> the detailed list of visible prerequisite
978  is still evolving. It is expected to include <tt>org.eclipse.core.boot </tt>  plug-ins is still evolving. It is expected to include <tt>org.eclipse.core.boot
979  and <tt>org.eclipse.core.runtime</tt> in all cases, plus <tt>org.eclipse.ui</tt>  </tt> and <tt>org.eclipse.core.runtime</tt> in all cases, plus <tt>org.eclipse.ui</tt>
980     and <tt>org.eclipse.swt</tt> when running with full workbench (ie. not     and <tt>org.eclipse.swt</tt> when running with full workbench (ie. not
981  "headless  mode"). Also, it would be useful to always expose <tt>org.eclipse.core.ant</tt>  "headless  mode"). Also, it would be useful to always expose <tt>org.eclipse.core.ant</tt>
982     so that build scripts can be used as part of the install handler implementation.     so that build scripts can be used as part of the install handler implementation.
983    </p>    </p>
984    
985  <p>The IInstallHandler interface supports the following methods [<b>Implementation  <p>The IInstallHandler interface supports the following methods [<b>Implementation
986    Note:</b> the detailed definition of the IInstallHandler interface is still     Note:</b> the detailed definition of the IInstallHandler interface is
987    evolving. The description below is not an API specification (simply a functional  still    evolving. The description below is not an API specification (simply
988    description)]: </p>  a functional    description)]: </p>
989    
990  <ul>  <ul>
991       <li> install-initiated - the install handler is called after a feature       <li> install-initiated - the install handler is called after a feature
992   was selected for installation, but before any files were downloaded. It is    was selected for installation, but before any files were downloaded. It
993   intended  to implement any custom click-through or user registration dialogs.  is  intended  to implement any custom click-through or user registration
994   The base implementation of this method supplied with the abstract class  dialogs.  The base implementation of this method supplied with the abstract
995      <tt>BaseInstallHandler       </tt>performs the default click-through processing  class     <tt>BaseInstallHandler       </tt>performs the default click-through
996  using the license  text supplied as part of the feature manifest. On return  processing using the license  text supplied as part of the feature manifest.
997  this method indicates  success (installation continues) of failure (installation  On return this method indicates  success (installation continues) of failure
998  is aborted).</li>  (installation is aborted).</li>
999        <li> install-downloaded - the install handler is called after all the         <li> install-downloaded - the install handler is called after all
1000   required  feature files were downloaded (feature, plugins, data) but before  the   required  feature files were downloaded (feature, plugins, data) but
1001   the actual  installation is performed. The install handler is expected to  before   the actual  installation is performed. The install handler is expected
1002   perform verification  of the non-plug-in data files (eg. security), or any  to   perform verification  of the non-plug-in data files (eg. security),
1003   other pre-install processing.&nbsp; On return this method indicates success  or any   other pre-install processing.&nbsp; On return this method indicates
1004   (installation continues) or failure (installation is aborted).</li>  success   (installation continues) or failure (installation is aborted).</li>
1005        <li> install-completion - the install handler is called after the feature         <li> install-completion - the install handler is called after the
1006    information and the plug-ins were installed. It is expected to complete  feature   information and the plug-ins were installed. It is expected to
1007  the  installation of any non-plug-in data that was part of the feature. On  complete the  installation of any non-plug-in data that was part of the feature.
1008  return  this method indicates success (returns custom install log) or failure  On return  this method indicates success (returns custom install log) or
1009  (installation  is aborted). On failure, the install handler is expected to  failure (installation  is aborted). On failure, the install handler is expected
1010  perform any required cleanup.</li>  to perform any required cleanup.</li>
1011        <li> uninstall-initiated - the install handler is called when a feature        <li> uninstall-initiated - the install handler is called when a feature
1012    is selected for removal, but before any of the standard uninstall processing    is selected for removal, but before any of the standard uninstall processing
1013    has taken place. It is passed the custom install log created by the install    has taken place. It is passed the custom install log created by the install
# Line 1034  Line 1043 
1043    </ul>    </ul>
1044    
1045  </ul>  </ul>
1046       In general, when processing signed jars, the user will be prompted for        In general, when processing signed jars, the user will be prompted
1047   each unrecognized certificate. The response choices will include aborting  for   each unrecognized certificate. The response choices will include aborting
1048   the installation (originator is not trusted), continuing the installation   the installation (originator is not trusted), continuing the installation
1049   (originator is trusted for this installation).   (originator is trusted for this installation).
1050  <h2> <a name="Update_Server"></a> Update Server</h2>  <h2> <a name="Update_Server"></a> Update Server</h2>
# Line 1047  Line 1056 
1056  <h3> <a name="Site_Map"></a> Site Map</h3>  <h3> <a name="Site_Map"></a> Site Map</h3>
1057       The update server URL can be specified as a full URL to the site map       The update server URL can be specified as a full URL to the site map
1058  file,   or a URL of a directory path containing the site map file (similar  file,   or a URL of a directory path containing the site map file (similar
1059  to index.html   processing). The site map site.xml format is defined by the   to index.html   processing). The site map site.xml format is defined by
1060  following dtd:  the  following dtd:
1061  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>
1062    
1063  <p><tt>&lt;!ELEMENT site (description?, feature*, archive*, category-def*)&gt;</tt>  <p><tt>&lt;!ELEMENT site (description?, feature*, archive*, category-def*)&gt;</tt>
# Line 1076  Line 1085 
1085    #IMPLIED</tt> <br>    #IMPLIED</tt> <br>
1086      <tt>&nbsp;&nbsp;&nbsp; url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1087    CDATA #REQUIRED<br>    CDATA #REQUIRED<br>
1088     &nbsp;&nbsp;&nbsp; label &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CDATA #IMPLIED<br>      &nbsp;&nbsp;&nbsp; label &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CDATA
1089    #IMPLIED<br>
1090    </tt><tt>&nbsp;&nbsp;&nbsp; os&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    </tt><tt>&nbsp;&nbsp;&nbsp; os&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1091    CDATA #IMPLIED</tt> <br>    CDATA #IMPLIED</tt> <br>
1092      <tt>&nbsp;&nbsp;&nbsp; arch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp; arch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# Line 1137  Line 1147 
1147        <br>        <br>
1148      Note, that for NL handling the URL value should be separated to allow      Note, that for NL handling the URL value should be separated to allow
1149  alternate  URLs to be specified for each national language.  alternate  URLs to be specified for each national language.
1150    
1151    </ul>    </ul>
1152        <li> &lt;feature&gt; - identifies referenced feature archive</li>        <li> &lt;feature&gt; - identifies referenced feature archive</li>
1153    
# Line 1147  Line 1158 
1158    feature type for the site. If the site type is the default Eclipse site    feature type for the site. If the site type is the default Eclipse site
1159  type,  the default feature type is the packaged feature type (as specified  type,  the default feature type is the packaged feature type (as specified
1160  in this  document).</li>  in this  document).</li>
1161        <li> id - optional feature identifier. The information is used as a         <li> id - optional feature identifier. The information is used as
1162  performance   optimization to speed up searches for features. Must match the  a  performance   optimization to speed up searches for features. Must match
1163  identifier   specified in the feature.xml of the referenced archive (the url  the identifier   specified in the feature.xml of the referenced archive (the
1164  attribute).   If specified, the version attribute must also be specified.</li>  url attribute).   If specified, the version attribute must also be specified.</li>
1165        <li> version - optional feature version. The information is used as        <li> version - optional feature version. The information is used as
1166  a  performance  optimization to speed up searches for features. Must match  a  performance  optimization to speed up searches for features. Must match
1167  the  version specified in the feature.xml of the referenced archive (the url   the  version specified in the feature.xml of the referenced archive (the
1168  attribute).  If specified, the id attribute must also be specified.</li>  url attribute).  If specified, the id attribute must also be specified.</li>
1169        <li> url - required URL reference to the feature archive. Can be relative        <li> url - required URL reference to the feature archive. Can be relative
1170    or absolute. If relative, it is relative to the location of the site.xml    or absolute. If relative, it is relative to the location of the site.xml
1171   file.       <b>Note</b>: the default site implementation allows features   file.       <b>Note</b>: the default site implementation allows features
1172  to be accessed without being explicitly declared using a &lt;feature&gt;  to be accessed without being explicitly declared using a &lt;feature&gt; entry.
1173  entry. By default, an undeclared features reference is interpreted as "features/&lt;id&gt;_&lt;version&gt;.jar"</li>  By default, an undeclared features reference is interpreted as "features/&lt;id&gt;_&lt;version&gt;.jar"</li>
1174         <li>label - optional feature label. The value is used for optimization         <li>label - optional feature label. The value is used for optimization
1175   when browsing the site from the update manager. Intended to be translated.<br>   when browsing the site from the update manager. Intended to be translated.<br>
1176        </li>        </li>
# Line 1181  Line 1192 
1192   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>   list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
1193    . Indicates this feature should only be installed on one of the specified    . Indicates this feature should only be installed on one of the specified
1194    ws systems. If this attribute&nbsp;is "*", the feature can be installed    ws systems. If this attribute&nbsp;is "*", the feature can be installed
1195    on all systems (portable implementation). This information is used as a     on all systems (portable implementation). This information is used as
1196  hint by the installation and update support (user can force installation of  a  hint by the installation and update support (user can force installation
1197  feature regardless of this setting).</li>  of feature regardless of this setting).</li>
1198        <li> nl - optional locale specification. A comma-separated list of        <li> nl - optional locale specification. A comma-separated list of
1199  locale   designators defined by Java. Indicates this feature should only  locale   designators defined by Java. Indicates this feature should only be
1200  be installed   on a system running with a compatible locale (using Java locale-matching  installed   on a system running with a compatible locale (using Java locale-matching
1201   rules). If this attribute&nbsp;is "*", the feature can be installed on all   rules). If this attribute&nbsp;is "*", the feature can be installed on all
1202  systems (language-neutral implementation). This information is used as a hint   systems (language-neutral implementation). This information is used as a
1203  by the installation and update support (user can force installation of feature  hint by the installation and update support (user can force installation
1204  regardless of this setting).</li>  of feature regardless of this setting).</li>
1205        <li>patch - optional specification indicating if this feature is a        <li>patch - optional specification indicating if this feature is a
1206   patch. Default is "false".&nbsp;</li>   patch. Default is "false".&nbsp;</li>
1207    
# Line 1199  Line 1210 
1210  actual  files referenced via the <tt>&lt;plugin&gt;</tt> or <tt>&lt;data&gt;</tt>  actual  files referenced via the <tt>&lt;plugin&gt;</tt> or <tt>&lt;data&gt;</tt>
1211     elements in the feature manifest). The site simply manages archives as     elements in the feature manifest). The site simply manages archives as
1212  a  path-to-URL map. The default Eclipse site implementation does not require  a  path-to-URL map. The default Eclipse site implementation does not require
1213    the &lt;archive&gt; section to be included in the site map (site.xml).    the &lt;archive&gt; section to be included in the site map (site.xml). Any
1214  Any   archive reference not explicitly defined as part of an &lt;archive&gt;    archive reference not explicitly defined as part of an &lt;archive&gt; section
1215  section   is assumed to be mapped to a url in the form "&lt;archivePath&gt;"    is assumed to be mapped to a url in the form "&lt;archivePath&gt;" relative
1216  relative   to the location of the site.xml file.</li>    to the location of the site.xml file.</li>
1217    
1218    <ul>    <ul>
1219       <li> path - required archive path identifier. This is a string that       <li> path - required archive path identifier. This is a string that
1220  is  determined  by the <a href="#Feature_Archive_Mapping_Id_To_Path">feature</a>  is  determined  by the <a href="#Feature_Archive_Mapping_Id_To_Path">feature</a>
1221     referencing this archive and is not otherwise interpreted by the site     referencing this archive and is not otherwise interpreted by the site (other
1222  (other   than as a lookup token).</li>    than as a lookup token).</li>
1223        <li> url - required URL reference to the archive. Can be relative or         <li> url - required URL reference to the archive. Can be relative
1224   absolute.  If relative, it is relative to the location of the site.xml file.</li>  or  absolute.  If relative, it is relative to the location of the site.xml
1225    file.</li>
1226    
1227    </ul>    </ul>
1228        <li> &lt;category-def&gt; - an optional definition of a category that        <li> &lt;category-def&gt; - an optional definition of a category that
# Line 1236  Line 1248 
1248  <p><tt>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</tt> </p>  <p><tt>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</tt> </p>
1249    
1250  <p>Translatable text contained in the site.xml can be separated into site&lt;_locale&gt;.properties  <p>Translatable text contained in the site.xml can be separated into site&lt;_locale&gt;.properties
1251    files using Java property bundle conventions. Note that the translated strings     files using Java property bundle conventions. Note that the translated
1252   are used at installation time (ie. do not employ the plug-in fragment runtime  strings  are used at installation time (ie. do not employ the plug-in fragment
1253   mechanism). The property bundles are located relative to the site.xml location.  runtime  mechanism). The property bundles are located relative to the site.xml
1254    </p>  location.   </p>
1255    
1256  <h3> <a name="Default_Site_Layout"></a> Default Site Layout</h3>  <h3> <a name="Default_Site_Layout"></a> Default Site Layout</h3>
1257       <tt>&lt;site root&gt;/</tt> <br>       <tt>&lt;site root&gt;/</tt> <br>
# Line 1265  Line 1277 
1277    servlets that compute the site.xml map, and control access to individual    servlets that compute the site.xml map, and control access to individual
1278   archives based on some user criteria)</li>   archives based on some user criteria)</li>
1279        <li> by supplying a custom concrete implementation of the site object        <li> by supplying a custom concrete implementation of the site object
1280   (installed  on the client machine, update server specified <tt>&lt;site type=""&gt;</tt>    (installed  on the client machine, update server specified <tt>&lt;site
1281   ). The custom concrete site implementation, together with any server-side  type=""&gt;</tt>  ). The custom concrete site implementation, together with
1282    logic support the required control mechanisms.</li>  any server-side   logic support the required control mechanisms.</li>
1283    
1284  </ul>  </ul>
1285       Eclipse provides an example demonstrating an implementation of an access       Eclipse provides an example demonstrating an implementation of an access
# Line 1298  Line 1310 
1310      <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1311   META_INF/</tt>   </p>   META_INF/</tt>   </p>
1312    
1313  <p><b>Implementation Note:</b> we will go back to the original design of not  <p><b>Implementation Note:</b> we will go back to the original design of
1314  splitting out fragments (ie. plugin and fragments go into the same install  not splitting out fragments (ie. plugin and fragments go into the same install
1315    location) </p>    location) </p>
1316    
1317  <h3> <a name="Unmanaged_Plugins"></a> "Unmanaged" Plug-Ins</h3>  <h3> <a name="Unmanaged_Plugins"></a> "Unmanaged" Plug-Ins</h3>
1318       Eclipse supports a concept of "unmanaged" plug-ins. These are plug-ins       Eclipse supports a concept of "unmanaged" plug-ins. These are plug-ins
1319   that were directly installed into the Eclipse file tree without being part   that were directly installed into the Eclipse file tree without being part
1320   of a feature (eg. developer unzipping plug-in archive directly into the Eclipse    of a feature (eg. developer unzipping plug-in archive directly into the
1321   file tree).  Eclipse  file tree).
1322  <p>Eclipse runtime recognizes these plugins during startup and loads the plug-in  <p>Eclipse runtime recognizes these plugins during startup and loads the
1323  information into the runtime registry following the standard plug-in binding  plug-in information into the runtime registry following the standard plug-in
1324  rules. The update support also recognizes the presence of this new plug-in,  binding rules. The update support also recognizes the presence of this new
1325  but since this plug-in is not part of any feature it cannot be updated using  plug-in, but since this plug-in is not part of any feature it cannot be updated
1326  the update support (hence "unmanaged"). Unmanaged plug-in that become referenced  using the update support (hence "unmanaged"). Unmanaged plug-in that become
1327  by a feature as a result of some future installation or update action become  referenced by a feature as a result of some future installation or update
1328  "managed" (can be updated as part of the feature). </p>  action become "managed" (can be updated as part of the feature). </p>
1329    
1330  <p>Unmanaged plug-ins are not displayed as part of the installation and update  <p>Unmanaged plug-ins are not displayed as part of the installation and update
1331    UI. </p>    UI. </p>
# Line 1321  Line 1333 
1333  <h3> <a name="Using_Native_Platform_Installers"></a> Using Native Platform  <h3> <a name="Using_Native_Platform_Installers"></a> Using Native Platform
1334   Installers</h3>   Installers</h3>
1335       The Eclipse installation contains plugins that can be shared across       The Eclipse installation contains plugins that can be shared across
1336  multiple   features. When installing and uninstalling features using the  multiple   features. When installing and uninstalling features using the Eclipse
1337  Eclipse installation   and update support, these relationship are correctly  installation   and update support, these relationship are correctly maintained.
1338  maintained. Only one   copy of any version of a plug-in is used.  Only one   copy of any version of a plug-in is used.
1339  <p>However, when using native platform installers, performing native uninstall  <p>However, when using native platform installers, performing native uninstall
1340    creates problems because plug-ins would be removed without regard to any    creates problems because plug-ins would be removed without regard to any
1341   sharing relationships. As a result, Eclipse <b>does not allow</b> plug-ins   sharing relationships. As a result, Eclipse <b>does not allow</b> plug-ins
1342   to be installed using native installers into the shared installation tree.   to be installed using native installers into the shared installation tree.
1343   Instead, native installers must establish their own installation root directory.   Instead, native installers must establish their own installation root directory.
1344   The subdirectory structure is the same as defined for base Eclipse. The private    The subdirectory structure is the same as defined for base Eclipse. The
1345   root directory is logically linked into the shared Eclipse installation  private  root directory is logically linked into the shared Eclipse installation
1346   via  a link file installed by the native installer. The file path for the   via  a link file installed by the native installer. The file path for the
1347   link  file is <tt>&lt;configRoot&gt;/links/</tt>. The <tt>&lt;configRoot&gt;   link  file is <tt>&lt;configRoot&gt;/links/</tt>. The <tt>&lt;configRoot&gt;
1348   </tt>  location is computed by Eclipse relative to the launch <a   </tt>  location is computed by Eclipse relative to the launch <a
# Line 1348  Line 1360 
1360  <p><tt>path=[r|rw] install-path[,[r|rw] install-path]*</tt> </p>  <p><tt>path=[r|rw] install-path[,[r|rw] install-path]*</tt> </p>
1361    
1362  <p>The property <tt>path</tt> is a comma-separated list of optionally annotated  <p>The property <tt>path</tt> is a comma-separated list of optionally annotated
1363    install paths. The property value <tt>install-path</tt> is a full file path     install paths. The property value <tt>install-path</tt> is a full file
1364   to the installation directory root, specified in local OS format. The optional  path  to the installation directory root, specified in local OS format. The
1365   annotation <tt>r</tt> or <tt>rw</tt> indicates whether Eclipse update support  optional  annotation <tt>r</tt> or <tt>rw</tt> indicates whether Eclipse
1366   should allow the specified location to be used for updates. Default is to  update support  should allow the specified location to be used for updates.
1367   allow updates&nbsp; (w). </p>  Default is to  allow updates&nbsp; (w). </p>
1368    
1369  <p>Eclipse does not manage the linked directories in any way. It simply detects  <p>Eclipse does not manage the linked directories in any way. It simply detects
1370    their existence by the presence of the link files, and includes the linked    their existence by the presence of the link files, and includes the linked
1371    plug-ins during the platform startup. The native installer is responsible    plug-ins during the platform startup. The native installer is responsible
1372    for uninstalling the link when the corresponding directory is removed.    for uninstalling the link when the corresponding directory is removed. Eclipse
1373  Eclipse   runtime ignores any links that cannot be resolved. <br>    runtime ignores any links that cannot be resolved. <br>
1374      &nbsp; </p>      &nbsp; </p>
1375      <br>      <br>
1376     <br>     <br>
1377    <br>    <br>
1378   <br>   <br>
1379     <br>
1380  </body>  </body>
1381  </html>  </html>

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13