Java Getriebe

Java und NetBeans

Statische Resourcen vom Compiler prüfen lassen

Benno Markiewicz hat in seinem Blog über eine Interessante Annotation in der NetBeans Plattform geschrieben: @StaticResource

NB platform: Catching missing resources at compile-time using @StaticResource | markiewb’s blog.

Gerade beim Refactoring kommt es gerne einmal vor, dass man eine Bilddatei oder auch eine Bundle.properties übersieht oder den entsprechenden Pfad in der Stringkonstante nicht anpasst. Die Annotation kann dabei helfen solche Probleme schneller und vor allem schon zur Compilezeit zu finden und nicht erst zur Laufzeit.

Es spielt dabei übrigens keine Rolle ob die Klassenkonstante mit der Annotation dran public oder private ist. Man muss die API der entsprechenden Klasse also nicht einmal verändern.

Annotations – geheimnisvolle Markierungen im Quelltext

This entry is part 1 of 1 in the series Annotation Processor

Seit der Version 1.5 kennt Java die so genannten Annotations. Die meisten Java Entwickler werden dieses Sprachkonstrukt nur als „Nutzer“ erfahren. Jeder wird schon mal eine @[javadoc]java.lang.Deprecated[/javadoc] oder @[javadoc]java.lang.SuppressWarnings[/javadoc] Annotation genutzt oder zumindest gesehen haben. Unter bestimmten Voraussetzungen kann es aber durchaus interessant sein eigene Annotations zu schreiben. Read More

Wie debugge ich einen Processor in NetBeans

Es ist schon nicht einfach einen eigenen Processor für Annotations zu schreiben, wenn man etwas Fehlerbehandlung einbauen möchte. Aber noch „schwieriger“ ist es diesen Processor im Debugger betrachten zu können. Das Problem ist, dass sich die IDE im Grunde genommen selber debuggen muss. Zur IDE hat man in den seltensten Fällen ein Projekt, zu dem man einfach Strg+F5 drücken könnte. Allerdings gelingt man mit einem einfach Trick sehr schnell an das gewünschte Ziel. Read More

The following options were not recognized by any processor

Dokumentationen sind toll. Vorausgesetzt sie erzählen dir von sich aus, was du wissen willst oder musst. Beim Thema „Annotation Processing“ habe ich noch keine wirklich gute Dokumentation gefunden. Viele Dinge muss man sich aus unterschiedlichen Stellen zusammen suchen oder mühsam aus den JavaDocs erraten. Das ganze auch noch in deutsch zu bekommen, kann man glaube ich sowieso vergessen. Umso schöner ist es, wenn man dann doch noch Mal etwas neues entdeckt. Read More

@ServiceProvider in einem JavaSE Projekt

Ich bin im Moment auf einem Annotation-Trip. Die Dinger sind cool. Vor allem in Zusammenhang mit ihren Processor Implementierungen. NetBeans macht es in seinen neusten Versionen selbst vor. So cool die XML Layer Strukturen zur Laufzeit auch sind, so uncool sind sie in dem Quellen zu pflegen. Dank des LayerGeneratingProcessors ist es aber verdammt einfach geworden Annotations (die ja bekanntlich direkt im Quelltext bei den betroffenen Klassen stehen) selber zu schreiben, die die notwendigen Einträge in der layer.xml erstellen.

Ein ähnliches leidiges Thema wie die XML Layer sind Services, die man selber in einer Textdatei unter META-INF/services pflegen darf. Auch hier bietet NetBeans von eine Annotation samt Processor bereit um diese Einträge direkt im Quelltext zu schreiben: @ServiceProvider.

In einer NetBeans RCP Anwendung ohne weiteres nutzbar und sogar zu bevorzugendes Mittel. Allerdings wäre so etwas in einer eigenen Standard Java Anwendung auch cool ((Um damit zum Beispiel eigene Processor Implementierungen zu registrieren.)). Ich hatte so etwas zwar auch schon mal selber geschrieben ((leider finde ich gerade die Quellen dazu nicht)) aber ganz so gut wie die NetBeans Implementierung war das dann doch nicht. Allerdings ist es relativ einfach möglich die Annotation von NetBeans in den eigenen Java SE Projekten zu nutzen: Read More

Annotations statt Layereinträge

„Der neue Besen kehrt gut, bevor er voll Staub ist.“ — Freidank ((http://de.wikiquote.org/wiki/Freidank))

Geertjan schreibt in seinem Blog, dass die Programmbeispiele von NetBeans in der Version 7.0 überarbeitet wurden. Vor allem die direkten Einträge im XML Layer wurden durch Annotations direkt in den entsprechenden Klassen ersetzt.

So nett ich die Idee hinter den Annotations auch finde. Die Screenshots in dem Blogbeitrag lassen mich allerdings auch ein wenig daran zweifeln, ob sie der Weisheit letzter Schluss sind. Zumindest in Sachen „Übersicht“ sind sie meiner Meinung nach ein Schritt zurück. Unbestritten sehe ich allerdings auch den Vorteil, dass die Annotations das Refactoring der Klassen einfacher (und auch Sicherer) machen und dass sie potentielle Fehleingaben im XML Layer vermindern.

Ich tue mich aber etwas schwer mit der „Darstellung“ die sich aus der Syntax einer Annotation ergibt. Es lässt sich (auf den ersten Blick in den Quelltext) nur schwer erkennen, welche korrespondierenden Einträge in der Layer zu diesen Annotations gehören. Sicherlich kann man in der generates-layer.xml nachsehen, aber das ist ja auch nicht Sinn der Sache. Hier würde eine Art „Editor“ oder zumindest „Viewer“ für den Annotationblock hilfreich sein. Allerdings muss ich auch gestehen, dass mir im Moment keine passende Darstellung dafür einfällt.

Vielleicht hat jemand ja eine Idee, wie man die Übersicht bei den Annotation/Layereintägen zurück gewinnen kann.

Jens