Was ist der Zweck: api.jar + impl.jar + bundle.jar?

8

Ich sehe viele Java-Pakete mit api, impl und bundle jars (name-api.jar, name-impl.jar, name-bundle.jar). Könnte jemand erklären, was diese bedeuten? Werden alle drei von der App benötigt?

    
Danijel 22.03.2012, 09:32
quelle

4 Antworten

6

Die Idee ist, dass Sie die Abhängigkeiten der Anwendung trennen können; in einem Versuch, Anwendungen portabler zu machen. Die Idee ist, dass Sie die Anwendung beim Kompilieren von api.jar abhängig machen können. Wenn Sie das Programm dann ausführen möchten, können Sie dann das entsprechende Implementierungsjar ( impl.jar ) und das entsprechende Ressourcenbündel jar ( bundle.jar ) wechseln.

Nehmen Sie als Beispiel an, dass die Bibliothek einige Datenbankinteraktionen durchführt. Sie schreiben Ihren Code so, dass er auf api.jar verweist. Angenommen, Sie benötigen es, um mit einer bestimmten Art von Datenbank zu arbeiten, z. MySQL - Sie würden dann das impl.jar , das spezifisch für MySQL-Datenbanken ist, zum Klassenpfad hinzufügen, um es zum Laufen zu bringen (wenn Sie später eine andere Datenbank benötigen, müssen Sie nur dieses jar im Klassenpfad wechseln).

Das bundle.jar ist ein wenig obskurer und nicht so üblich. Dies könnte verwendet werden, um Konfigurationseinstellungen für die Bibliothek bereitzustellen. Zum Beispiel könnte es verwendet werden, um sprachspezifische Einstellungen oder eine spezifischere Konfiguration zu liefern. Im Fall der Datenbankbibliothek könnte es sein, dass die Implementierung für alle Versionen von MySQL entworfen wurde, und das Ressourcenbündel jar bietet Konfigurationsdateien, die es ermöglichen, für eine bestimmte MySQL-Version zu arbeiten.

    
Mark Rhodes 22.03.2012, 09:49
quelle
6

Oft:

  • name-api.jar enthält nur die Schnittstelle der API.
  • name-impl.jar bietet eine Implementierung aller Schnittstellen in der Datei name-api.jar
  • name-bundle.jar bündelt alles mit allen benötigten Klassen, um eine Java-Anwendung auszuführen.
Sandro Munda 22.03.2012 09:36
quelle
1

api.jar enthält API-Schnittstellen. Dies sind Schnittstellen als ein Vertrag, dem die Implementierung der API folgen sollte.

impl.jar ist die Implementierung von api.jar . Sie können nicht nur die impl.jar ohne die api.jar haben.

bundle.jar ist die Ressource (wenn ich mich nicht irre). Dies sind Ressourcen, die für den zur Ausführung erforderlichen Implementierungscode benötigt werden.

    
Buhake Sindi 22.03.2012 09:37
quelle
-1

Ich habe noch nie so ein Arrangement gesehen.

Wenn der Designer die App in drei JARs verpacken würde, würde ich sagen, dass alle drei benötigt werden.

Aber Sie sollten erkennen, dass es nur eine Entscheidung des Designers ist. Es ist möglich, dass er / sie gerade ein einziges JAR mit allem erschaffen hätte und du wärst nicht klüger.

Ich rate jetzt, aber wenn Sie diese JARs öffnen würden, würden Sie nur Interfaces im API JAR, Implementierungen dieser Interfaces im impl JAR und Ressourcenbündel und andere .properties Dateien im Bundle JAR sehen. Probieren Sie es aus und sehen Sie. Du wirst etwas lernen.

    
duffymo 22.03.2012 09:36
quelle

Tags und Links