Вы можете также рассмотреть возможность помещения интерфейсов в com.company_name.subsystem
, а реализацию в com.company_name.subsystem.impl
, специальный код OSGI, если таковой имеется, может быть в com.company_name.subsystem.osgi
.
Иногда у вас может быть несколько реализаций одного и того же интерфейса. В этом случае вы можете рассмотреть - com.company_name.subsystem.impl1
и com.company_name.subsystem.impl2
, например:
com.company.scm // the scm api
com.company.scm.git // its git implementaton
com.company.scm.svn // its subversion implementation
com.company.scm.osgi // the place to put an OSGI Activator
В этом смысле структура пакета может быть независимой от OSGi, если вы позже перейдете в другой контейнер, вы просто добавите дополнительный
com.company.scm.sca // or whatever component model you might think of
Всегда иметь api
и impl
в имени вашего пакета может раздражать. В случае сомнений используйте impl
, но не api
.