Warum ist es überhaupt dort?
Sie haben instabilen Code in die Hauptzeile eingecheckt? Warum?
Instabiler Code sollte nicht in Trunk / Main / Master oder wie auch immer der Name des Haupttrunks lautet eingecheckt werden. Dies wird als Entwicklung mit hohem Risiko angesehen und sollte stattdessen in einer eigenen Filiale abgespeichert werden, an der Sie gearbeitet haben, anstatt in main einzuchecken.
Ich möchte Sie (und Ihren Teamleiter) nachdrücklich ermutigen, Advanced SCM Branching Strategies zu lesen . Achten Sie insbesondere auf die Rolle der Entwicklung und darauf, was als Entwicklung mit hohem Risiko angesehen wird:
Erwägen Sie im Allgemeinen, für jedes Projekt mit hohem Risiko separate Zweigstellen zu verwenden. Projekte mit hohem Risiko zeichnen sich durch große Größe, große Anzahl von Personen, unbekannte Themen, hochtechnische Themen, sehr enge Zeitpläne, ungewisse Liefertermine, unvollständige oder schwankende Anforderungen und geografisch verteilte Projektteams aus. In ähnlicher Weise sollten Sie in jeder Version einen einzelnen Zweig für eine risikoarme Entwicklung festlegen. Mehrere Quellen, einschließlich [WING98], empfehlen, für diesen Zweck die Hauptleitung zu verwenden. Berücksichtigen Sie die oben für die Hauptlinie erörterten Faktoren, bevor Sie sich zu dieser Vorgehensweise begeben. Bei der Entwicklung mit geringem Risiko kann es zu Abweichungen von der Hauptstrategie kommen, selbst wenn mehrere Mitglieder einer Produktfamilie über die Hauptstrategie koordiniert werden.
Wenn Sie es zulassen, dass Leute instabilen (oder nicht verwendeten) Code in die Hauptzeile einchecken, werden Sie die zukünftigen Entwicklungsbemühungen hinsichtlich des Versuchs, diesen Code zu verwalten, verwirren. Jeder Zweig und Klon des Repräsentanten von jetzt an bis zum Ende der Zeit wird dies enthalten, bis jemand "seinen toten Code" sagt und ihn löscht.
Es gibt einige, die sagen "Nun, wenn es in einem Zweig ist, wird es vergessen", und obwohl dies wahr sein mag, ist es um ein Vielfaches schlimmer, toten (und instabilen) Code in der Hauptzeile vergessen zu haben, da er die gesamte zukünftige Entwicklung verwirrt, bis er entfernt wird - und dann ist es noch mehr vergessen. Ein gut benannter Zweig von "/ fooProject / branches / WeisBigIdea" (oder einem gleichwertigen Zweig) ist sichtbar und in Zukunft einfacher zu bearbeiten - insbesondere, wenn er funktioniert.
@Deprecated
Das erste ist die @Deprecated
Anmerkung. Dies geht über den Javadoc hinaus und gibt Compiler-Warnungen aus. javac
stellt ein -deprecation
Flag bereit , das wie folgt beschrieben wird:
Zeigen Sie eine Beschreibung jeder Verwendung oder Außerkraftsetzung eines veralteten Members oder einer Klasse an. Ohne -deprecation
, javac
zeigt eine Zusammenfassung der Quelldateien , die Verwendung oder Überschreibung veraltet Mitglieder oder Klassen. -Deprecation ist eine Abkürzung für -Xlint:deprecation
.
Wie bereits erwähnt, geht dies über die Standard-Compiler-Warnungen hinaus.
In vielen IDEs werden veraltete Methoden und Werte durchgestrichen dargestellt:
foo.bar();
Und würde eine Ausgabe erzeugen wie:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
Abhängig von Ihrer Build-Struktur wird der Build möglicherweise durch Warnungen unterbrochen. Dies würde den Build nur unterbrechen, wenn eine Ihrer Klassen verwendet wird (nicht, wenn sie einfach kompiliert wird).
@CustomAnnotation
Hierfür gibt es viele Ansätze. Zum Beispiel die Lightweight-Annotation javac @Warning, die einen Annotationsprozessor bereitstellt , der beim Kompilieren eine Warnung auslöst , wenn etwas mit dieser Annotation verwendet wird ( ein NetBeans-Tutorial zu benutzerdefinierten Annotationsprozessoren, damit Sie eine Vorstellung davon bekommen, was hinter der steht Szenen).
Oracle beschreibt sogar ein Beispiel für die Verwendung von benutzerdefinierten Annotationen für eine @Unfinished
Annotation in Das Beste aus Javas Metadaten machen, Teil 2: Benutzerdefinierte Annotationen .
Mit dem AnnotationProcessor können Sie während der Kompilierung beliebigen Code ausführen. Es liegt ganz bei Ihnen zu entscheiden, was Sie tun möchten. Warnen Sie, brechen Sie den Build ab, wenn etwas verwendet wird. Es gibt zahlreiche Tutorials im Internet, in denen erklärt wird, wie man diese Art von Code schreibt. Ob Sie beim Kompilieren einen Fehler erzeugen möchten (dies ist ärgerlich und führt dazu, dass er gelöscht wird) oder wenn er verwendet wird (das Schreiben ist etwas komplexer).
Beachten Sie, dass dies alles bedeutet, dass die Builds geändert werden, um den Annotation-Prozessor tatsächlich zu verwenden.