Package org.osgi.annotation.bundle

# Annotation Type Requirement

@Documented @Retention(CLASS) @Target({TYPE,PACKAGE}) @Repeatable(Requirements.class) public @interface Requirement
Define a requirement for a bundle.

For example:

     @Requirement(namespace=ExtenderNamespace.EXTENDER_NAMESPACE,
                  name="osgi.component", version="1.3.0")

This annotation is not retained at runtime. It is for use by tools to generate bundle manifests or otherwise process the a package.

This annotation can be used to annotate an annotation.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static final class`
`Requirement.Cardinality`
Cardinality for this requirement.
`static final class`
`Requirement.Resolution`
Resolution for this requirement.

## Required Element Summary

Required Elements
Modifier and Type
Required Element
Description
`String`
`namespace`
The namespace of this requirement.

## Optional Element Summary

Optional Elements
Modifier and Type
Optional Element
Description
`String[]`
`attribute`
A list of attribute or directive names and values.
`String`
`cardinality`
The cardinality of this requirement.
`String`
`effective`
The effective time of this requirement.
`String`
`filter`
The filter expression of this requirement, if any.
`String`
`name`
The name of this requirement within the namespace.
`String`
`resolution`
The resolution policy of this requirement.
`String`
`version`
The floor version of the version range for this requirement.

## Element Details

### namespace

String namespace
The namespace of this requirement.

### name

String name
The name of this requirement within the namespace.

If specified, adds an expression, using the `&` operator with any specified `filter()`, to the requirement's filter directive to test that an attribute with the name of the namespace is equal to the value of the specified name.

Default:
  `""`

### version

String version
The floor version of the version range for this requirement.

If specified, adds a version range expression, using the `&` operator with any specified `filter()`, to the requirement's filter directive. The ceiling version of the version range is the next major version from the floor version. For example, if the specified version is `1.3`, then the version range expression is `(&(version>=1.3)(!(version>=2.0)))`.

The specified version must be a valid OSGi version string.

Default:
  `""`

### filter

String filter
The filter expression of this requirement, if any.

Default:
  `""`

### effective

String effective
The effective time of this requirement.

Specifies the time the requirement is available. The OSGi framework resolver only considers requirement without an effective directive or effective:=resolve. Requirements with other values for the effective directive can be considered by an external agent.

If not specified, the `effective` directive is omitted from the requirement clause.

Default:
  `"resolve"`

### attribute

String[] attribute
A list of attribute or directive names and values.

Each string should be specified in the form:

- `"name=value"` for attributes.
- `"name:type=value"` for typed attributes.
- `"name:=value"` for directives.

These are added, separated by semicolons, to the requirement clause.

Default:
  `{}`

### cardinality

String cardinality
The cardinality of this requirement.

Indicates if this requirement can be wired a single time or multiple times.

If not specified, the `cardinality` directive is omitted from the requirement clause.

Default:
  `"SINGLE"`

### resolution

String resolution
The resolution policy of this requirement.

A mandatory requirement forbids the bundle to resolve when this requirement is not satisfied; an optional requirement allows a bundle to resolve even if this requirement is not satisfied.

If not specified, the `resolution` directive is omitted from the requirement clause.

Default:
  `"MANDATORY"`