2010-12-27 11 views
8

Hemos estado utilizando las colecciones de Google en la producción durante varios meses. Nos gustaría comenzar a usar guayaba para funciones adicionales. Sin embargo, me da miedo llevar la guayaba a nuestra pila de productos, pero algunos desarrolladores pueden comenzar a usar clases "beta".¿Cómo evito el uso de clases beta de la biblioteca google guava?

Tenemos varias pruebas de unidad en nuestro código, pero en este punto, prefiero no incluir la clase beta 'beta', está sujeta a cambios en el futuro.

¿Hay alguna forma fácil de detectar si el proyecto incluye alguna clase de guayaba 'beta'?

+0

Tenga en cuenta que puede haber métodos '@ Beta' en clases que no son' @ Beta'. Además, usar API '@ Beta' no debería ser un problema a menos que los estés usando en una biblioteca que estás liberando. Usarlos en una _aplicación_ debería estar bien ... vea [mi respuesta aquí] (http://stackoverflow.com/questions/3678122/best-way-to-use-guava/3678559#3678559). – ColinD

+0

ColinD - Aclaración: estamos en un equipo global que crea sistemas automatizados de negociación de acciones para varias regiones de EE. UU., Europa, Asia, etc.). Rompimos el sistema en varios 'componentes/módulos' utilizando maven. Entonces cada región puede 'andamiar' estas bibliotecas para crear un sabor diferente de los motores de comercio de acciones. Entonces, me preocupa cuando tenemos equipos de desarrollo en 6 regiones diferentes y queremos controlar cómo y qué se usan. Realmente quiero usar guayaba pero evite @Beta – mjlee

Respuesta

2

En sus pruebas unitarias, configure un aspecto para registrar y/o fallar cuando se utiliza cualquiera de las clases beta (o cualquier clase no deseada).

1

Aparentemente Google Guava tiene una anotación @Beta que indica qué clases o métodos no desea utilizar.

unfortunalty esta anotación es @Retention(value=CLASS) que nunca he usado, pero ya que se supone que tener en .class archivos podría significar que todavía será availiable a Class.getDeclaredAnnotations(). Si no es así, deberá usar CGLIB o una biblioteca similar de nivel de byte para encontrarlo.

Teniendo en cuenta que es posible que desee instrumento de su aplicación CI o añadir un cargador de clases de cheques a su aplicación para detectar el uso de la API beta

1

Si utilizas Eclipse, access rules son una opción. Obtendrá un error de tiempo de compilación cada vez que importe o use una clase restringida.

+0

¿Puede explicar cómo configurar Eclipse para buscar automáticamente clases/métodos marcados como @Beta sin poner manualmente todas las clases en la lista de reglas de acceso? –

+0

Las reglas de acceso solo miran tipos por nombre, no por anotación, y no por métodos individuales. (Esa Beta fue una anotación que quedó clara después de que escribí esta respuesta.) Dicho esto, estoy bastante seguro de que uno podría descubrir dónde se almacena el eclipse y escribirlo automáticamente. – meriton

+0

Ok, gracias. Esperaba que encontraras algún truco secreto que no sabía :) –

0

Aquí hay una lista de Guava's Beta Classes. Tendrás que decirle a otros desarrolladores que consulten este enlace antes de usar una clase de guayaba.

4

Overstock.com Recientemente released a Findbugs que indica el uso de clases, métodos o campos de @Beta.

+0

Actualiza el enlace, ya no es válido. – TJR

+1

Derp, lo encontró - https: //github.com/overstock/library-detectors – TJR

0

Pensaba que probablemente podrías utilizar el reflejo para eso si tuvieras una lista de clases beta, que puedes usar el enlace de Gili. A continuación, se pone bastante fácil - sólo ver esta respuesta:

Can you find all classes in a package using reflection?

probablemente me acaba de poner esto en una prueba de unidad y tener la prueba de la unidad fallar si se ve una clase que no le gusta.

Cuestiones relacionadas