Widzę wiele pakietów Java ma api, impl i bundle jars (nazwa-api.jar, nazwa-impl.jar, nazwa-bundle.jar). Czy ktoś mógłby wyjaśnić, co one oznaczają? Czy wszystkie trzy są potrzebne w aplikacji?Jaki jest cel: api.jar + impl.jar + bundle.jar?
Odpowiedz
Chodzi o to, że można oddzielić zależności aplikacji; w celu zwiększenia mobilności aplikacji. Chodzi o to, że podczas kompilacji można uzależnić aplikację od api.jar
. Następnie, gdy chcesz uruchomić program, możesz przełączyć się w odpowiednim słoju implementacyjnym (impl.jar
) i odpowiednim słoju pakunku zasobów (bundle.jar
).
Jako przykład załóżmy, że biblioteka wykonuje pewną interakcję z bazą danych. Piszesz swój kod, aby odnosił się do api.jar
. Załóżmy teraz, że potrzebujesz go do pracy z określonym typem bazy danych, np. MySQL - dodajesz wtedy impl.jar
, który jest specyficzny dla baz danych MySQL do ścieżki klasy, aby uruchomić go (jeśli potrzebujesz później innej bazy danych - wystarczy zmienić ten jar w ścieżce klasy).
Numer bundle.jar
jest nieco bardziej niejasny i nie jest tak powszechny. To może być użyte do dostarczenia ustawień konfiguracyjnych dla biblioteki. Na przykład może być używany do dostarczania ustawień specyficznych dla języka lub do bardziej specyficznej konfiguracji. W przypadku biblioteki baz danych może być tak, że implementacja jest zaprojektowana dla wszystkich wersji MySQL, a jar pakietu zasobów dostarcza pliki konfiguracyjne, które pozwalają mu pracować dla konkretnej wersji MySQL.
Często:
name-api.jar
zawiera tylko interfejs API.name-impl.jar
zapewnia realizację wszystkich interfejsów w imię-api.jarname-bundle.jar
skupia wszystkie wszystko ze wszystkimi niezbędnymi klas uruchomić aplikację Java.
Nigdy nie widziałem takiego rozwiązania.
Jeśli projektant spakował aplikację do trzech JARów, powiedziałbym, że wszystkie trzy są potrzebne.
Powinieneś jednak wiedzieć, że to tylko wybór dokonany przez projektanta. Możliwe, że on sam stworzył pojedynczy JAR ze wszystkim, co w nim jest, a ty nie byłbyś mądrzejszy.
Zgaduję teraz, ale gdybyś otworzył te JAR-y, zobaczyłbyś tylko interfejsy w JAR API, implementacje tych interfejsów w implikowanym pliku JAR oraz pakiety zasobów i inne pliki .properties w pakiecie JAR . Spróbuj i zobacz. Dowiesz się czegoś.
api.jar
zawiera interfejsy API. Są to interfejsy jako umowa, która powinna być zgodna z implementacją API.
impl.jar
jest implementacją api.jar
. Nie możesz po prostu mieć impl.jar
bez api.jar
.
bundle.jar
to zasoby (jeśli się nie mylę). Są to zasoby potrzebne do wprowadzenia kodu niezbędnego do uruchomienia.
- 1. Jaki jest cel preompompiledApp.config?
- 2. Jaki jest cel używania?
- 3. Jaki jest cel Rake?
- 4. Jaki jest cel JNDI
- 5. Jaki jest cel Mage_Core_Block_Template_Facade
- 6. Jaki jest cel IApplicationBuilder.New()
- 7. Jaki jest cel "() =>"
- 8. Jaki jest cel curdoc()?
- 9. Jaki jest cel aclocal?
- 10. Jaki jest cel vertexAttribPointer?
- 11. Jaki jest cel IAsyncStateMachine.SetStateMachine?
- 12. Jaki jest cel Ember.Container
- 13. Jaki jest cel layout.xml?
- 14. Jaki jest cel XNoImplicitPrelude?
- 15. Jaki jest cel CMakeScripts?
- 16. Jaki jest cel HttpHeaders.TryAddWithoutValidation?
- 17. Jaki jest cel ldexp?
- 18. Jaki jest cel git-mv?
- 19. Jaki jest cel Array.GetLowerBound (int)?
- 20. Jaki jest cel $ w XSLT
- 21. Jaki jest cel funkcji character_set_connection?
- 22. Jaki jest cel Pk anorma?
- 23. Jaki jest cel używania CommandType.Tabledirect
- 24. Jaki jest cel nazwy mojolicowej?
- 25. Jaki jest cel .git/log
- 26. jaki jest cel Thread.holdsLock (blokada)?
- 27. Jaki jest cel javax StreamSource
- 28. Jaki jest cel klasy Expression?
- 29. Jaki jest cel metody Thread.SpinWait?
- 30. Scala: jaki jest cel "przesłonięcia"