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