Я немного боролся с этой проблемой. Это настолько абстрактно и просто, что я всегда волновался, что «делаю это неправильно».
Я использовал его в основном проекте, который зависит от других проектов, потому что модуль Guice, который устанавливает привязки, был частью основного проекта.
Я наконец понял, что библиотеки должны сами поставлять модули. В этот момент вы можете зависеть только от экземпляра модуля (не от конкретного) и от интерфейсов, которые с ним связаны.
Сделав это на шаг лучше, вы можете использовать новый механизм ServiceLoader в Java 6 для автоматического поиска и установки всех модулей Guice, доступных на пути к классам. Затем вы можете поменять зависимости, просто изменив путь к классу (db-real.jar или db-mock.jar).