All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aQute.bnd.annotation.headers.About Maven / Gradle / Ivy

There is a newer version: 7.0.0
Show newest version
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 *
* The annotations provide the following features: *
    *
  • 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 the {@link aQute.bnd.annotation.licenses.ASL_2_0 ASL_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 {
 *   ...
 * }
 * 
*/ public class About { }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy