Sind Annotationsklassendateien im Laufzeitklassenpfad erforderlich?

8

Wenn eine Klasse mit einer Annotation versehen ist, muss die Definition dieser Annotation im Klassenpfad der Laufzeit enthalten sein, damit die Klasse verwendet werden kann? Zum Beispiel angesichts der Anmerkung

%Vor%

kann ich das Programm

ausführen %Vor%

ohne Component.class im Klassenpfad? (In meinem Test könnte ich, aber ist dieses Verhalten durch die Spezifikation definiert?)

Ich frage, weil es widersprüchliche Ansprüche , ob die Verwendung einer Anmerkung aus einer Bibliothek eine Abhängigkeit von dieser Bibliothek erzeugt.

    
meriton 05.04.2012, 17:10
quelle

2 Antworten

4

Laufzeit-Annotationen sind Metainformationen, die zur Laufzeit vom Annotationsprozessor verarbeitet werden. Wenn zur Laufzeit ein Zugriff auf die Annotation besteht, fügen Sie auf jeden Fall Annotationen im Klassenpfad hinzu. Zum Beispiel brauchen Junit definitiv die Annotationen im Klassenpfad, um Testmethoden zu bestimmen.

Wenn die Annotation nicht verarbeitet wird, ist kein Classpath erforderlich.

Ich würde erwarten, dass sogar ein AccessibleObject.getAnnotations() Ausnahmen verursachen würde. Es ist sicher für die Annotationstypen im Klassenpfad.

    
Jayan 05.04.2012 17:27
quelle
0

Ja, Sie können das Programm mit ausführen, ohne Component.class im Klassenpfad zu haben. Mehr Details hier: Warum verursacht eine fehlende Annotation nicht? eine ClassNotFoundException zur Laufzeit?

    
kodstark 10.11.2017 10:30
quelle

Tags und Links