Я вижу, что на многих пакетах Java есть api, impl и bundle jars (name-api.jar, name-impl.jar, name-bundle.jar). Может кто-нибудь объяснить, что это значит? Необходимы ли все три приложения?Какова цель: api.jar + impl.jar + bundle.jar?
ответ
Идея состоит в том, что вы можете отделить зависимости приложения; в попытке сделать приложения более портативными. Идея состоит в том, что вы можете сделать приложение зависимым от api.jar
при компиляции. Затем, когда вы хотите запустить программу, вы можете переключить соответствующую банку реализации (impl.jar
) и соответствующую банку ресурсов (bundle.jar
).
В качестве примера предположим, что библиотека взаимодействует с базой данных. Вы пишете свой код, чтобы он ссылался на api.jar
. Теперь предположим, что вам нужно, чтобы он работал с конкретным типом базы данных, например. MySQL - вы бы затем добавили impl.jar
, который относится к базам данных MySQL, к пути к классам, чтобы заставить его работать (если вам нужна другая база данных позже - вам нужно только переключить эту банку в пути к классам).
bundle.jar
немного более неясен и не так распространен. Это можно использовать для настройки конфигурации библиотеки. Например, он может использоваться для предоставления языковых настроек или для более конкретной конфигурации. В случае с библиотекой базы данных может быть реализовано, что реализация предназначена для всех версий MySQL, а набор ресурсов содержит файлы конфигурации, которые позволяют ему работать для определенной версии MySQL.
Часто:
name-api.jar
содержит только интерфейс API.name-impl.jar
обеспечивает реализацию всех интерфейсов в имени-api.jarname-bundle.jar
Связки все со всеми необходимыми классами для запуска приложения Java.
Я никогда не видел такого устройства.
Если дизайнер упаковал приложение в три JAR, то я бы сказал, что все три необходимы.
Но вы должны признать, что это просто выбор, сделанный дизайнером. Возможно, он мог бы создать только один JAR со всем, что было бы в нем, и вы не были бы более мудрее.
Я предполагаю, что теперь, но если вы откроете эти JAR, вы увидите только интерфейсы в JAR API, реализации этих интерфейсов в JAR-интерфейсе, а также пакеты ресурсов и другие .properties-файлы в пакете JAR , Попробуй и посмотри. Вы узнаете что-то.
api.jar
содержит интерфейсы API. Это интерфейсы в качестве контракта, которым должна следовать реализация API.
impl.jar
является реализация api.jar
. Вы не можете просто иметь impl.jar
без api.jar
.
bundle.jar
- это ресурсы (если я не ошибаюсь). Это ресурсы, необходимые для кода реализации, необходимого для запуска.
- 1. Как jsf-api.jar и jsf-impl.jar взаимосвязаны во время выполнения?
- 2. Где находятся источники jsf-impl.jar 1.1 и jsf-api.jar 1.1?
- 3. Какова цель "?"
- 4. Разница между javax.servlet-api.jar vs servlet-api.jar
- 5. Какова цель std :: rank?
- 6. Какова цель $ _POST?
- 7. Какова цель IApplicationBuilder.New()
- 8. Какова цель метода IntStream.empty()?
- 9. Какова цель IAsyncStateMachine.SetStateMachine?
- 10. Какова цель пакета
- 11. Какова цель заявления `pass`?
- 12. Какова цель "@SuppressWarnings (" unchecked ")"?
- 13. Какова цель этого javascript?
- 14. Какова цель константы PHP_DEBUG?
- 15. Какова цель configSections?
- 16. Какова цель сортированных наборов?
- 17. Какова цель python setuptools?
- 18. Какова цель «pm2 save»?
- 19. Какова цель метода _createElement?
- 20. Какова цель character_set_connection?
- 21. Какова цель ServicePointManager.ServerCertificateValidationCallback?
- 22. Какова цель теста Очистка
- 23. Какова цель макроса: GL_UNPACK_ROW_LENGTH
- 24. Какова цель Object.prototype.toString()?
- 25. Какова цель Array.GetLowerBound (int)?
- 26. Какова цель onSurfaceChanged?
- 27. Какова цель функции fseek (..)?
- 28. Какова цель модульного тестирования?
- 29. Какова реальная цель application.ini
- 30. Какова цель демонанизации?