2010-10-14 13 views
21

Czy istnieje narzędzie wiersza poleceń, najlepiej w JDK, które drukuje wszystkie adnotacje w pliku klasy lub pobiera określoną adnotację jako argument do wydrukowania?Jak wyświetlić adnotację pliku klasy Java w wierszu poleceń?

Jeśli tak, czy istnieje odpowiednik polecenia, które można uruchomić na pliku jar dla określonej klasy zawartej w?

Mam google to przez chwilę i nie miałem szczęścia. :(

Odpowiedz

11

Popraw mnie, jeśli jestem zły, ale pomyślałem, że adnotacje są usuwane z klas przez kompilator, chyba że użyjesz Adnotation @Retention (RetentionPolicy.RUNTIME) na samych adnotacjach, informacja nie zostanie zachowana . w pliku klasy Jeśli adnotacje są zachowane w classfile, można użyć javap (część JDK), aby zobaczyć te:

javap my.package.MyClass 

Aktualizacja: To wydaje się potrzebować JDK7, javap JDK6 za robi drukować adnotacje , ale możesz użyć następujących narzędzi ze strony internetowej University of Washington, aby wyodrębnić informacje o adnotacjach:

Annotation-utilities

+0

Dzięki takiej sytuacji. Grałem z narzędziami w katalogu JDK/bin i znalazłem ten. Wygląda na to, że ta adnotacja nie jest wyświetlana, ale widzę ją przez edytor tekstu: "RuntimeVisibleAnnotations^A^@! L /VersionID;^A^@^Evalue^A^@^P $ Revision: 1.5 $ " –

+0

Powinienem dodać tę adnotację @Retention (RetentionPolicy.RUNTIME) zgodnie z podanymi wskazaniami. –

+1

Czy trzeba uruchomić 'javap' z dodatkowymi flagami, aby adnotacje się wyświetlały? Nie widzę ich, gdy uruchamiam 'javap java.lang.String'. –

21

Użycie opcji -verbose lub -v z javap w wersji 1.7 lub nowszej spowoduje wyświetlenie zachowanych adnotacji.

przykład:

javap -p -v ./services/target/windup-web-services/WEB-INF/classes/org/jboss/windup/web/services/model/RegisteredApplication.class 

#50 = Utf8 Ljavax/persistence/Column; 
#64 = Utf8 Lorg/jboss/windup/web/services/validators/NotBlankConstraint; 
#67 = Utf8 Ljavax/validation/constraints/Size; 
... 
private java.lang.String title; 
    descriptor: Ljava/lang/String; 
    flags: ACC_PRIVATE 
    RuntimeVisibleAnnotations: 
    0: #50(#62=I#63) 
    1: #64(#65=s#66) 
    2: #67(#68=I#69,#70=I#63,#65=s#71 
+0

Dla wersji 1.7+ jest to poprawna odpowiedź. – OscarRyz

Powiązane problemy