Pourquoi est-il là en premier lieu?
Vous avez archivé du code instable dans la ligne principale? Pourquoi?
Le code instable ne doit pas être archivé dans trunk / main / master ou quel que soit le nom du tronc principal. Ceci est considéré comme un développement à haut risque et aurait plutôt dû être séquestré dans sa propre branche sur laquelle vous avez travaillé plutôt que consigné dans le principal.
Je vous encourage fortement (et votre chef d'équipe) à lire les stratégies avancées de branchement SCM . En particulier, faites attention au rôle de développement et à ce qu'il dit sur ce qui est considéré comme un développement à haut risque:
En général, envisagez d'utiliser des succursales distinctes pour chaque projet à haut risque. Les projets à haut risque se caractérisent par une grande taille, un grand nombre de personnes, un sujet inconnu, un sujet hautement technique, des délais très serrés, des dates de livraison incertaines, des exigences incomplètes ou volatiles et des équipes de projet réparties géographiquement. De même, envisagez de désigner une seule branche pour le développement à faible risque dans chaque version. Plusieurs sources, dont [WING98], recommandent d'utiliser la ligne principale à cet effet. Tenez compte des facteurs discutés ci-dessus pour la ligne principale avant de vous engager dans cette ligne de conduite. Le développement à faible risque peut avoir une politique différente de la ligne principale même si vous avez plusieurs membres d'une famille de produits coordonnés via la ligne principale.
Laisser les gens archiver du code instable (ou inutilisé) dans la ligne principale signifie que vous confondrez les efforts de développement futurs pour essayer de maintenir ce code. Chaque branche et clone du représentant jusqu'à la fin des temps contiendra ceci jusqu'à ce que quelqu'un dise "son code mort" et le supprime.
Il y en a qui disent "eh bien, si c'est dans une branche, il est oublié" et bien que cela puisse être vrai, avoir oublié du code mort (et instable) dans la ligne principale est plusieurs fois pire car il confond tout développement futur jusqu'à ce qu'il soit supprimé - et alors c'est encore plus oublié. Une branche bien nommée de "/ fooProject / branches / WeisBigIdea" (ou équivalent) est visible et plus facile à utiliser à l'avenir - surtout si cela fonctionne.
@Deprecated
La première chose est l' @Deprecated
annotation. Cela va au-delà du javadoc et crache des avertissements du compilateur. javac
fournit un -deprecation
indicateur qui est décrit comme:
Afficher une description de chaque utilisation ou remplacement d'un membre ou d'une classe obsolète. Sans -deprecation
, javac
affiche un résumé des fichiers source qui utilisent ou remplacent les membres ou les classes obsolètes. -deprecation est un raccourci pour -Xlint:deprecation
.
Comme indiqué, cela va au-delà des avertissements du compilateur standard.
Dans de nombreux IDE, les méthodes et valeurs obsolètes sont affichées avec un barré:
foo.bar();
Et produirait une sortie comme:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
Selon la structure de votre build, des avertissements peuvent interrompre la build. Cela ne casserait la construction que si l'une de vos classes était utilisée (pas si elle est simplement simplement compilée).
@CustomAnnotation
Il existe de nombreuses approches à ce sujet. Par exemple, l' annotation Lightweight javac @Warning qui fournit un processeur d'annotations qui déclenche un avertissement au moment de la compilation lorsque quelque chose avec cette annotation est utilisée ( un tutoriel netbeans sur les processeurs d'annotations personnalisés afin que vous puissiez avoir une idée de ce qui se passe derrière le scènes).
Oracle décrit même un exemple d'utilisation d'annotations personnalisées pour une @Unfinished
annotation dans Tirer le meilleur parti des métadonnées Java, Partie 2: Annotations personnalisées .
Avec AnnotationProcessor , vous pouvez exécuter du code arbitraire au moment de la compilation. C'est vraiment à vous de décider ce que vous voulez qu'il fasse. Avertissez, cassez la version lorsque quelque chose est utilisé. Il existe de nombreux didacticiels sur le Web pour savoir comment écrire ce type de code. Que vous souhaitiez générer une erreur lors de sa compilation (ce sera ennuyeux et entraîner sa suppression) ou s'il est utilisé (un peu plus complexe à écrire).
Notez que tout cela implique de changer les builds pour utiliser réellement le processeur d'annotation.