From Apache OpenOffice Wiki
Jump to: navigation, search

One can imagine a large variety of dependencies an extension can have on its environment: availability of certain UNO types and services, availability of features only present since some specific version of Apache OpenOffice, availability of other installed extensions, availability of third-party libraries, etc.

To support this, a mechanism is introduced so that extensions can bring along a specification of their dependencies. When a user wants to install an extension, the application first checks whether all dependencies are met. If not, an error dialog is displayed informing the user that the extension could not be installed.

The only actual dependencies currently defined are < value="X">, where X is the required underlying version (“2.1”, “2.2”, etc.), starting with 2.1; and a corresponding, rarely needed < value="X">, introduced in 3.1. (Even if an extension is installed in a derived product like StarOffice, these dependencies are on the underlying Apache OpenOffice version.) 2.0.3 and earlier are not prepared to correctly handle extensions with dependencies. In 2.0.3 and earlier, if a .uno.pkg (or .zip) extension specifies any dependencies, they are effectively ignored and the extension is installed nonetheless. An .oxt extension cannot be installed at all in 2.0.3 and earlier. So, if an extension shall run in any Apache OpenOffice version, it should be named .uno.pkg and should not specify any dependencies; if an extension shall only run in 2.0.4 and later, it should be named .oxt and should not specify any dependencies; and if an extension shall only run in a future version, it should be named .oxt and should specify the appropriate dependencies (which will be defined by the time the given Apache OpenOffice version is available).

There is a certain dilemma: On the one hand, nothing is yet known about the kinds of dependencies that will be defined in the future. On the other hand, at least some information about the unsatisfied dependencies of a future extension must be displayed in 2.0.4. Therefore, each dependency specified by an extension must contain a human-readable (non-localized, English) name that can be displayed to the user, conveying at least rudimentary information about the nature of the unsatisfied dependency. Future versions of that already know a certain kind of dependency are expected to display more detailed information.

Likewise, when new dependencies are defined over time, old versions of will not know about them. Those old will thus reject extensions making use of those dependencies, even if the old Apache OpenOffice version would actually satisfy the dependencies. Therefore, each dependency specified by an extension may optionally contain an attribute that specifies the minimal version of Apache OpenOffice that would satisfy the dependency. Old versions of Apache OpenOffice that do not know the given dependency will then check for the optional attribute and, if present, nevertheless accept the dependency if the given version is large enough. This feature is only supported since 2.3.

Within the description.xml, dependencies are recorded as follows: An XML element whose name consists of the namespace name and the local part dependencies may appear at most once as a child of the root element. This element has as its element content an arbitrary number of child elements that are not further constrained except for the following: Each such child element should have an attribute whose name consists of the namespace name and the local part name, and it may optionally have an attribute whose name consists of the namespace and the local part Each such child element represents one dependency, and the value of its name attribute shall contain the human-readable dependency name (and the value, after normalization, should not be empty).

If an extension is either not of type .oxt, .uno.pkg, or .zip, or does not contain a description.xml, or the description.xml does not contain a dependencies' element, or the dependencies' element does not contain any child elements, then the extension does not specify any dependencies.

See also

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages