Package aQute.bnd.annotation.headers
@Export
@Version("2.0.0")
package aQute.bnd.annotation.headers
This package contains a number of annotations that create or append headers
in the manifest. These annotations simplify maintaining these headers:
- The annotations can be applied on the types that are generating their need instead of maintaining them in the manifest
- Less errors because of the use of annotations
- Use of IDE features to track them or navigate
- Macros - use the bnd macro preprocessor for DNRY
- Coloring - define custom annotations that encapsulate some headers
- No runtime dependencies since all annotations are build time.
- No duplicates
Macros
Any strings in the annotations are run through the bnd preprocessor and can therefore use any of the myriad of bnd macros (except system commands, for obvious reason they are excluded). As a convenience, a number of local macros are set from the context:${@package}
– The package name${@class}
– The class name to which this macro is applied to${@class-short}
– The short class name to which this macro is applied to${@version}
– The package version if set${@frange;version[;isProvider]}
– A macro to create a filter expression on a version based on the semantic versioning rules. Default is consumer, specify true for the isProvider to get provider semantics.
Coloring
Annotations can only be applied once, making it impossible to add for example two Provide-Capability headers on the same type. It also would become unreadable quickly. The advised way to use most of these annotation headers is therefore through 'annotation coloring'. These header annotations should be applied to custom annotations that represents the 'thing'. This is clearly represented in the BundleLicense custom annotations like for example theASL_2_0
annotation. This annotation can be applied to any type and will automatically
then create the appropriate clauses.
For example:
public class Webserver { @RequireCapability(ns="osgi.extender", name="webserver", version="${@version}") @interface Require {} @ProvideCapability(ns="osgi.extender", filter="(&(osgi.extender=webserver)${@frange;${@version}}))") @interface Provide {} ... }This resource can now be stored in a library to be used by others. If a component now wants to depend this resource, it can declare its component as follows:
@Webserver.Require public class MyResource { ... }
-
ClassDescriptionThe Bundle-Category header holds a comma-separated list of category names.Maven defines contributors and developers in the POM.The Bundle-Copyright header contains the copyright specification for this bundle.Maven defines developers in the POM.The Bundle-DocURL headers must contain a URL pointing to documentation about this bundle.The
Bundle-License
header provides an optional machine readable form of license information.Standard categories as specified on OSGi References PageDeprecated.Deprecated.seeorg.osgi.annotation.bundle.Requirement
Deprecated.seeorg.osgi.annotation.bundle.Requirement.Resolution
org.osgi.annotation.bundle.Capability