Perché è lì al primo posto?
Hai controllato il codice instabile nella linea principale? Perché?
Il codice instabile non deve essere controllato in trunk / main / master o qualunque sia il nome del trunk principale. Questo è considerato uno sviluppo ad alto rischio e dovrebbe invece essere sequestrato nel suo stesso ramo su cui hai lavorato piuttosto che controllato in main.
Incoraggio strongmente te (e il tuo team principale) a leggere Strategie di ramificazione avanzata di SCM . In particolare, prestate attenzione al ruolo di sviluppo e cosa dice su ciò che è considerato uno sviluppo ad alto rischio:
In general, consider using separate branches for each high-risk project. High risk projects are characterized by large size, large numbers of people, unfamiliar subject matter, highly technical subject matter, very tight time lines, uncertain delivery dates, incomplete or volatile requirements, and geographically distributed project teams. Similarly, consider designating a single branch for low risk development in each release. Several sources including [WING98] recommend using the mainline for this purpose. Consider the factors discussed above for the mainline before committing to this course of action. Low risk development may have different policy from the mainline even if you have multiple members of a product family coordinating through the mainline.
Lasciare che le persone controllino il codice instabile (o non utilizzato) nella linea principale significa che confonderai i futuri sforzi di sviluppo per provare a mantenere questo codice. Ogni ramo e clone del rappresentante da ora fino alla fine dei tempi conterrà questo fino a quando qualcuno dice "il suo codE morto" e lo cancella.
Ci sono alcuni che dicono "bene, se è in un ramo si dimenticano" e mentre quello può essere vero, avendo dimenticato il codice morto (e instabile) nella linea principale è molte volte peggiore in quanto confonde tutti gli sviluppi futuri finché non è rimosso - e quindi è ancora più dimenticato. Un ramo ben definito di "/ fooProject / branches / WeisBigIdea" (o equivalente) è visibile e più facile da utilizzare in futuro, specialmente se funziona.
@Deprecated
La prima cosa è l'annotazione @Deprecated
. Questo va oltre la javadoc e sputa gli avvertimenti del compilatore. javac
fornisce un flag -deprecation
che è descritto come:
Show a description of each use or override of a deprecated member or class. Without -deprecation
, javac
shows a summary of the source files that use or override deprecated members or classes. -deprecation is shorthand for -Xlint:deprecation
.
Come notato, questo va ben oltre gli avvertimenti del compilatore standard.
In molti IDE, i metodi e i valori deprecati sono mostrati con una barratura:
foo.bar();
E produrrebbe un risultato come:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
A seconda della struttura di costruzione, potresti avere avvertenze che interrompono la compilazione. Questo solo interrompe la compilazione se è stata usata una delle tue classi (non se è semplicemente compilata).
@CustomAnnotation
Ci sono molti approcci a questo. Ad esempio, l' annotazione javac @Warning leggero che fornisce un processore di annotazioni che attiva un avviso in fase di compilazione quando qualcosa con quell'annotazione viene utilizzato ( un tutorial netbeans sui processori di annotazione personalizzati in modo da farti un'idea di cosa succede dietro le quinte).
Oracle descrive anche un esempio di utilizzo di annotazioni personalizzate per un'annotazione @Unfinished
in Making la maggior parte dei metadati di Java, parte 2: annotazioni personalizzate .
Con AnnotationProcessor , puoi eseguire codice arbitrario al momento della compilazione. Dipende davvero da te decidere cosa vuoi che faccia. Avverti, rompi la build quando qualcosa viene usato. Ci sono numerosi tutorial sul Web per come scrivere questo tipo di codice. Se vuoi generare un errore quando è compilato (questo sarà fastidioso e porterà a essere cancellato) o se è usato (un po 'più complesso da scrivere).
Si noti che tutto ciò implica la modifica delle build per utilizzare effettivamente il processore di annotazione.