2017-04-07 2 views
0

Ich baue eine JPA-Bibliothek, die in anderen Projekten verbraucht werden kann. Was ist der beste Ansatz für die Veröffentlichung derselben? Soll ich als Fettglas mit allen Abhängigkeiten publizieren oder nur die Klassen veröffentlichen?Best Practice für Maven-Bibliothek

bitte eine Build-Plugin empfiehlt für den Aufbau und die Veröffentlichung von gemeinsamen Dienstprogramme oder Bibliotheken

Antwort

0

Die Kurz: HAUPT niemals etwas als Fett jar veröffentlichen. Ihre Bibliothek sollte eine Pom-Datei enthalten, die Ihre Bibliotheken für Kompilierungs-/Laufzeitabhängigkeiten deklariert. Es gibt keinen Unterschied zwischen der Veröffentlichung einer JPA oder eines anderen Bibliothekstyps. So verwenden Sie einfach die Standard-Maven/Gradle veröffentlicht Mechanismus

Je länger: Ihr Projektes pom-Datei sollte die erforderlichen Laufzeitabhängigkeiten für Ihre Bibliotheksliste, so dass, wenn ein anderes Projekt, das Sie JAR-Datei als Abhängigkeit enthalten bekommen sie die transitiven Abhängigkeiten automatisch. Es gibt einen entscheidenden Unterschied zwischen diesem und einem Fettglas. Wenn Ihre Bibliothek Guava Version 16 benötigt und Sie diese in ein anderes Projekt einbinden, das bereits Version 20 von Guava verwendet, können Sie in Maven/Gradle die Version auswählen, die Sie verwenden möchten (oder Sie können beides haben, aber es ist eine schlechte Idee). Wenn du beginnst, den Code anderer Leute in dich aufzunehmen, dann verlierst du diese Möglichkeit, da dein Fat Jar spezifische Version von 3rd Party Libraries enthält, die du beim Aufbau deiner Library bestimmt hast. Ich habe mehrere MethodNotFoundError gesehen, weil jemand eine alte Version der Bibliothek in ein anderes jar eingefügt hat. Während der Entwicklung könnte dies funktionieren, weil Sie auch die neue Version der Bibliothek haben, und zwar zuerst im Klassenpfad, aber zur Laufzeit könnte das fat jar zuerst und die alten Versionen der Klasse die neuere Version überschatten.

Es ist wichtig zu verstehen, dass, wenn die JVM lädt Gläser aus einem Ordner, zum Beispiel in einer Webanwendung (WEB-INF/lib) können Sie nicht die Reihenfolge der JAR-Dateien im Klassenpfad, deshalb Fat Gläser haben oder mehrere Versionen derselben Bibliothek ist eine sehr schlechte Idee. Es ist sogar möglich, dass zwei Maschinen denselben Ordnerinhalt in anderer Reihenfolge lesen können, da die Standardsortierreihenfolge vom Dateisystem abhängig ist.

Viel Glück

+0

Danke für die ausführliche Antwort. Es hat mir geholfen, zu entscheiden. – Vijay