Ihre neu gepackte Bibliothek ist nicht abwärtsbinärkompatibel (BC) mit der alten Version. Aus diesem Grund können einige der nicht neu kompilierten Bibliotheksclients die Ausnahme auslösen.
Dies ist eine vollständige Liste der Änderungen in der Java-Bibliotheks-API, die dazu führen können, dass Clients, die mit einer alten Version der Bibliothek erstellt wurden, java.lang auslösen. IncompatibleClassChangeError, wenn sie auf einem neuen ausgeführt werden (dh BC brechen):
- Nicht endgültiges Feld wird statisch,
- Nicht konstantes Feld wird nicht statisch,
- Klasse wird Schnittstelle,
- Schnittstelle wird Klasse,
- Wenn Sie der Klasse / Schnittstelle ein neues Feld hinzufügen (oder eine neue Superklasse / Superschnittstelle hinzufügen), kann ein statisches Feld von einer Superschnittstelle einer Clientklasse C ein hinzugefügtes Feld (mit demselben Namen) ausblenden, das von der geerbt wurde Superklasse von C (sehr seltener Fall).
Hinweis : Es gibt viele andere Ausnahmen, die durch andere inkompatible Änderungen verursacht werden: NoSuchFieldError , NoSuchMethodError , IllegalAccessError , InstantiationError , VerifyError , NoClassDefFoundError und AbstractMethodError .
Das bessere Papier über BC ist "Evolving Java-based APIs 2: Erreichen der binären API-Kompatibilität", geschrieben von Jim des Rivières.
Es gibt auch einige automatische Tools , um solche Änderungen zu erkennen:
Verwendung des Japi-Compliance-Checkers für Ihre Bibliothek:
japi-compliance-checker OLD.jar NEW.jar
Verwendung des Clirr-Werkzeugs:
java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
Viel Glück!