Поделиться интерфейсом - PullRequest
       33

Поделиться интерфейсом

2 голосов
/ 01 декабря 2011

Я пишу Java-приложение, которое будет загружать сторонние «драйверы». Я намереваюсь разработать интерфейс, который определит необходимые методы, которые «драйвер» должен реализовать для работы в приложении.

Цель состоит в том, чтобы "драйвер" содержался в файле jar. Тогда сторонние разработчики «драйверов» должны будут реализовать интерфейс.

Пока я пытался это выяснить, я переместил код «драйвера» в jar и обнаружил, что у меня возникли проблемы, поскольку у меня есть интерфейс, определенный как в основном приложении, так и в файле jar.

Есть ли рекомендуемый способ реализации этого подхода, или я иду по неверному пути?

J

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

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

В этом случае библиотека драйвера будет содержать этот API-файл в качестве зависимости, предоставляемой основным приложением.

В терминах Maven зависимость будет иметь область действия provided или compile для библиотеки.

Обратите внимание, что вам следует избегать использования одного и того же класса дважды в разных библиотеках, поскольку это, скорее всего, приведет к проблемам с загрузкой классов, исключениям приведения классов и т. Д. (Если только не существует некоторой области видимости загрузчика классов, которая изолирует приложения, как это делают большинство серверов приложений).

1 голос
/ 01 декабря 2011

Поскольку интерфейс является частью предоставляемого вами API / библиотеки, у вас должен быть там интерфейс, а третьи лица должны импортировать ваш API (из вашего jar-файла) и реализовать соответствующий интерфейс, например, как Java API предоставляетИнтерфейс SQL, но не фактическая реализация, а MySQL реализует интерфейс API Java.Если ваш интерфейс для драйвера используется за пределами вашего приложения, вы можете упаковать его как отдельный jar, но если он действительно полезен только для взаимодействия с вашей библиотекой, он должен быть упакован с остальной частью библиотеки.

0 голосов
/ 01 декабря 2011

Если вы на самом деле переместили интерфейс, вам нужно перестроить обе банки.Если вы скопировали его, вам нужно дать другое имя пакета

...