Какова цель: api.jar + impl.jar + bundle.jar? - PullRequest
8 голосов
/ 22 марта 2012

Я вижу, что во многих пакетах Java есть jar-файлы api, impl и bundle (name-api.jar, name-impl.jar, name-bundle.jar). Может кто-нибудь объяснить, что это значит? Все три нужны приложению?

Ответы [ 4 ]

6 голосов
/ 22 марта 2012

Идея состоит в том, что вы можете разделить зависимости приложения; в попытке сделать приложения более переносимыми. Идея состоит в том, что вы можете сделать приложение зависимым от api.jar при компиляции. Затем, когда вы захотите запустить программу, вы можете включить соответствующий jar реализации (impl.jar) и соответствующий jar пакета ресурсов (bundle.jar).

В качестве примера предположим, что библиотека взаимодействует с базой данных. Вы пишете свой код так, чтобы он ссылался на api.jar. Теперь предположим, что вам это нужно для работы с конкретным типом базы данных, например MySQL - затем вы должны добавить impl.jar, специфичный для баз данных MySQL, к пути к классам, чтобы заставить его работать (если вам понадобится другая база данных позже - вам нужно только переключить этот jar в пути к классам).

bundle.jar немного более неясен и не так распространен. Это может быть использовано для предоставления настроек конфигурации для библиотеки. Например, его можно использовать для предоставления настроек, специфичных для языка, или некоторых более специфических настроек. В случае библиотеки базы данных может быть, что реализация предназначена для всех версий MySQL, а jar пакета ресурсов предоставляет файлы конфигурации, которые позволяют ему работать для определенной версии MySQL.

6 голосов
/ 22 марта 2012

Часто:

  • name-api.jar содержит только интерфейс API.
  • name-impl.jar обеспечивает реализацию всех интерфейсов в имени-api.jar
  • name-bundle.jar объединяет все необходимые классы для запуска приложения Java.
1 голос
/ 22 марта 2012

api.jar содержит интерфейсы API.Это интерфейсы как контракт, которому должна следовать реализация API.

impl.jar - это реализация api.jar.Вы не можете просто получить impl.jar без api.jar.

bundle.jar - ресурсов (если я не ошибаюсь).Это ресурсы, необходимые для кода реализации, необходимого для запуска.

0 голосов
/ 22 марта 2012

Я никогда не видел такой договоренности.

Если бы дизайнер упаковал приложение в три JAR-файла, я бы сказал, что все три необходимы.

Но вы должны признать, что это просто выбор, сделанный дизайнером.Вполне возможно, что он / она мог бы просто создать один JAR со всем в нем, и вы бы не стали мудрее.

Я думаю, сейчас, но если бы вы открыли эти JAR, вы бы увиделитолько интерфейсы в API JAR, реализации этих интерфейсов в impl JAR, а также наборы ресурсов и другие файлы .properties в комплекте JAR.Попробуйте и посмотрите.Вы чему-нибудь научитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...