2010-12-27 3 views
8

Wir verwenden Google-Sammlungen seit mehreren Monaten in der Produktion. Wir möchten Guava für zusätzliche Funktionen verwenden. Allerdings habe ich Angst, Guava in unseren Produkt-Stack zu bringen. B/c Einige Entwickler beginnen vielleicht, Beta-Klassen zu verwenden.Wie verhindere ich die Verwendung von Beta-Klassen aus der Google Guava Library?

Wir haben verschiedene Komponententests in unserem Code, aber zu diesem Zeitpunkt, ich bevorzuge es nicht zu "Beta" -Klasse b/c enthalten ist es in der Zukunft Änderungen vorbehalten.

Gibt es einen einfachen Weg, um zu erkennen, ob das Projekt irgendwelche 'Beta'-Guaven-Klassen enthält?

+0

Denken Sie daran, dass es '@ Beta'-Methoden in Klassen geben kann, die sonst nicht' @ Beta' sind. Außerdem sollte die Verwendung von '@ Beta'-APIs kein Problem darstellen, es sei denn, Sie verwenden sie in einer Bibliothek, die Sie veröffentlichen. Die Verwendung in einer _Anwendung_ sollte in Ordnung sein ... siehe [meine Antwort hier] (http://stackoverflow.com/questions/3678122/best-way-to-use-guava/3678559#3678559). – ColinD

+0

ColinD - Klarstellung - wir sind in einem globalen Team, das automatisierte Aktienhandelssysteme für verschiedene Regionen in den USA, Europa, Asien usw. entwickelt. Wir haben das System mit Hilfe von Maven in verschiedene 'Komponenten/Module' aufgeteilt. So kann jede Region diese Bibliotheken "rüsten", um einen unterschiedlichen Geschmack von Aktienhandelssystemen zu schaffen. Es ist mir ein Anliegen, wenn wir Entwicklungsteams in 6 verschiedenen Regionen haben und kontrollieren wollen, wie wir uns einsetzen. Ich möchte wirklich Guava verwenden, aber vermeiden @Beta – mjlee

Antwort

2

In Ihren Komponententests richten Sie einen Aspekt zum Protokollieren und/oder Fehlschlagen ein, wenn eine der Beta-Klassen (oder eine unerwünschte Klasse) verwendet wird.

1

Anscheinend Google Guava hat eine @Beta Annotation, die angibt, welche Klassen oder Methoden Sie nicht verwenden möchten.

Unfortunalty diese Anmerkung ist @Retention(value=CLASS), die ich noch nie benutzt habe, aber da es angenommen hat, in .class Dateien gehalten werden, es könnte bedeuten, dass es noch zu Class.getDeclaredAnnotations() availiable sein wird. Wenn nicht, müssen Sie CGLIB oder eine ähnliche Bytecode-Level-Bibliothek verwenden, um sie zu finden.

Da Sie Instrument, um Ihre CI-Anwendung möchten vielleicht oder eine Überprüfung Classloader zu Ihrer App hinzufügen Nutzung der Beta-API

1

zu erkennen Wenn Sie Eclipse verwenden, sind access rules eine Option. Sie erhalten einen Kompilierungsfehler, wenn Sie eine eingeschränkte Klasse importieren oder anderweitig verwenden.

+0

Können Sie bitte näher erläutern, wie Sie Eclipse so konfigurieren, dass automatisch nach Klassen/Methoden gesucht wird, die als @Beta gekennzeichnet sind, ohne alle Klassen manuell in die Liste der Zugriffsregeln aufzunehmen? –

+0

Zugriffsregeln sehen Typen nur nach Namen, nicht nach Annotation und nicht nach einzelnen Methoden. (Dass Beta eine Anmerkung war, wurde erst klar, nachdem ich diese Antwort geschrieben hatte.) Das heißt, ich bin mir ziemlich sicher, dass man herausfinden könnte, wo Eclipse diese Liste speichert und sie automatisch schreibt. – meriton

+0

Ok, danke. Ich hatte gehofft, dass du einen geheimen Trick gefunden hast, von dem ich nichts wusste :) –

0

Hier ist eine Liste von Guava's Beta Classes. Sie müssen anderen Entwicklern sagen, diesen Link vor der Verwendung einer Guave-Klasse zu überprüfen.

4

Overstock.com vor kurzem released ein Findbugs-Plugin, das die Verwendung von @Beta-Klassen, Methoden oder Feldern kennzeichnet.

+0

Bitte aktualisiere den Link, er ist nicht mehr gültig. – TJR

+1

Derp, gefunden - https: //github.com/overstock/library-detectors – TJR

0

Ich dachte, Sie könnten wahrscheinlich Reflexion für das verwenden, wenn Sie eine Liste von Beta-Klassen hatten, die Sie mit Gili's Link verwenden können. Dann wird es ziemlich einfach - diese Antwort sehen:

Can you find all classes in a package using reflection?

Ich würde wahrscheinlich nur, dass setzen in einem Gerät zu testen und haben die Unit-Test fehlschlagen, wenn es eine Klasse sieht man nicht mögen.