2010-01-20 12 views

Antwort

40
  1. bnd tool (und Maven-Bundle-Plugin) nutzt Paket Anmerkungen. Durch Einfügen von @Version und @Export Annotation in package-info.java können OSGi-Metadaten generiert werden.
  2. javadoc verwendet Paketanmerkungen.
  3. JAXB verwendet Annotationen auf Paketebene, for example, um die Zuordnung eines Java-Typs zum XML-Schema-Typ paketweit anzugeben. Paketanmerkungen werden auch in der XML-Bindung von JBoss verwendet.
  4. Das Struts 2 Convention-Plugin verwendet an annotation, um einen Standard-Interceptor für alle Aktionen in einem Paket anzugeben.
  5. Es gibt einige Paket-Ebene Hibernate Annotations. Ein Beispiel für die Verwendung dieser Annotationen finden Sie unter here.
7

Ich nehme an, @Deprecated würde Sinn machen. Und vielleicht etwas wie @Generated, wenn das gesamte Paket von einem Tool aus einer nicht-Java-Quelle generiert wurde. Oder @Internal, wenn dieses Paket nicht Teil einer öffentlichen API ist.

Vielleicht können OSGi-Tools (wo Sie die Versionen Ihrer Pakete deklarieren müssen und die Pakete, auf die Sie angewiesen sind) ebenfalls davon Gebrauch machen.

Hat jemand diese in der Wildnis gesehen?

4

Zwei Gründe, die ich mir vorstellen kann:

  • mit Anmerkungen versehen spezielle Pakete, einige Aspekte lassen (zum Beispiel unter Verwendung von AspectJ) die Klassen in ihnen für bestimmte Funktionen zu weben.
  • Anmerkungen zu einigen Paketen, die von einigen Tools gelesen werden sollen, z. B. für Quellen-, Metadaten- oder andere Arten der Ressourcengenerierung.
+0

Sie, dass ein Paket innerhalb dieser zu annotieren alle Klassen entspricht Anmerkungen versehen zu sagen, sind:

Ein ähnliches Argument könnte für generali Code Metadaten um die gleiche Art von Dingen gemacht werden Paket auf einen Schlag? – Gili

+0

Nein, ich meine, Sie können damit angeben, dass die gesamten Klassen in diesem Paket gewebt werden sollen. –

+0

Wie unterscheidet sich das von dem, was ich geschrieben habe? – Gili

1

Dies ist nicht der eigentliche Zweck, aber ich verwende sie als Workaround, um Neukompilierung der package-info.java Dateien zu vermeiden.

Das Problem ist, dass javac (und die Ant-Task <javac>) für die package-info.java keine Klasse-Datei erstellt, wenn es nur Dokumentation ist (der Grund für ihre Existenz) und die package bla; Aussage, und dass das Ant-Task Neukompilierungen jede Datei, für die es keine (oder eine ältere) entsprechende .class Datei gibt.

Das Hinzufügen einer Dummy-Annotation (wie SuppressWarnings) führte dazu, dass ein package-info.class erzeugt wird und die Datei daher erst wieder neu übersetzt wird.

(Ant 1.8.0 lösten dies durch einen leeren Paket-info.class zu schaffen, auch wenn es keine Anmerkung war, aber ich bin mit einem älter ant hier.)

2

JAXB zum Beispiel most annotations erlaubt, die normalerweise verwendet auf einem Typ, um gleich gut auf ein Paket angewendet zu werden.Die Bedeutung in diesem Fall wäre, den Standardwert für alle Klassen in diesem Paket anzugeben.

Zum Beispiel, wenn Sie alle Eigenschaften aller Klassen in einem Paket wünschen, die über Getter/Setter ausgesetzt sind in XML abgebildet werden könnten Sie @XmlAccessorType(XMLAccessType.PROPERTY)auf jeder Klasse angeben oder einfach auf der Verpackung angegeben werden.

0

Testmetadaten - das sind Metadaten zu Testpaketen (Komponententests oder andere). Sie können verschiedene Testmetadaten zuordnen, die auf der Paketebene angebracht sind, z. B .: Features, Eigentümer, Versionen, Bugs/Probleme usw. Diese können auf Klassen- oder Methodenebene verfeinert werden, jedoch mit Definitionen oder Standardwerten auf Paketebene könnte der Kürze halber praktisch sein. Ich habe eine Variante dieses Ansatzes verwendet (vor dem Nutzen von Anmerkungen). Eigenschaften, Eigentum, Mängel, historische Informationen, usw.