¿Por qué está allí en primer lugar?
¿Ha verificado código inestable en la línea principal? ¿Por qué?
El código inestable no debe registrarse en trunk / main / master ni en el nombre principal de la troncal. Esto se considera un desarrollo de alto riesgo y, en cambio, debería haber sido secuestrado en su propia rama en la que trabajó en lugar de registrarse en main.
Le recomiendo encarecidamente (y a su líder de equipo) que lea Estrategias avanzadas de ramificación SCM . En particular, preste atención al rol de desarrollo y lo que dice sobre lo que se considera desarrollo de alto riesgo:
En general, considere usar sucursales separadas para cada proyecto de alto riesgo. Los proyectos de alto riesgo se caracterizan por un gran tamaño, un gran número de personas, un tema desconocido, un tema altamente técnico, plazos muy ajustados, fechas de entrega inciertas, requisitos incompletos o volátiles y equipos de proyectos distribuidos geográficamente. Del mismo modo, considere designar una sola rama para el desarrollo de bajo riesgo en cada versión. Varias fuentes, incluida [WING98], recomiendan utilizar la línea principal para este propósito. Considere los factores discutidos anteriormente para la línea principal antes de comprometerse con este curso de acción. El desarrollo de bajo riesgo puede tener una política diferente de la línea principal, incluso si tiene varios miembros de una familia de productos que coordinan a través de la línea principal.
Permitir que las personas verifiquen el código inestable (o no utilizado) en la línea principal significa que confundirá los futuros esfuerzos de desarrollo al tratar de mantener este código. Cada rama y clon del representante desde ahora hasta el final de los tiempos contendrá esto hasta que alguien diga "su código muerto" y lo elimine.
Hay algunos que dicen "bueno, si está en una rama se olvida" y aunque eso puede ser cierto, haber olvidado el código muerto (e inestable) en la línea principal es muchas veces peor, ya que confunde todo el desarrollo futuro hasta que se elimine, y entonces es aún más olvidado. Una rama bien nombrada de "/ fooProject / sucursales / WeisBigIdea" (o equivalente) es visible y más fácil de trabajar en el futuro, especialmente si funciona.
@Deprecated
Lo primero es la @Deprecated
anotación. Esto va más allá del javadoc y escupe advertencias del compilador. javac
proporciona una -deprecation
bandera que se describe como:
Mostrar una descripción de cada uso o anulación de un miembro o clase en desuso. Sin -deprecation
, javac
muestra un resumen de los archivos de origen que usan o anulan miembros o clases en desuso. -deprecation es la abreviatura de -Xlint:deprecation
.
Como se señaló, esto va más allá de las advertencias estándar del compilador.
En muchos IDEs, los métodos y valores obsoletos se muestran con un tachado:
foo.bar();
Y produciría resultados como:
$ javac -Xlint:all Foo.java Bar.java
Bar.java:2: warning: [deprecation] Foo in unnamed package has been deprecated
interface Bar extends Foo { }
^
Dependiendo de su estructura de construcción, es posible que haya advertencias que rompan la construcción. Esto solo rompería la compilación si se usara una de sus clases (no si simplemente se compila).
@CustomAnnotation
Hay muchos enfoques para esto. Por ejemplo, la anotación Lightweight javac @Warning que proporciona un procesador de anotación que dispara una advertencia en el momento de la compilación cuando se usa algo con esa anotación ( un tutorial de netbeans sobre procesadores de anotación personalizados para que pueda tener una idea de lo que está sucediendo detrás del escenas)
Oracle incluso describe un ejemplo del uso de anotaciones personalizadas para una @Unfinished
anotación en Cómo aprovechar al máximo los metadatos de Java, Parte 2: Anotaciones personalizadas .
Con el AnnotationProcessor , puede ejecutar código arbitrario en tiempo de compilación. Realmente depende de usted decidir qué quiere que haga. Advertir, romper la construcción cuando se usa algo. Existen numerosos tutoriales en la web sobre cómo escribir este tipo de código. Si desea generar un error cuando se compila (esto será molesto y provocará que se elimine) o si se usa (bastante más complejo de escribir).
Tenga en cuenta que todo esto implica cambiar las compilaciones para utilizar realmente el procesador de anotaciones.