Как ограничить использование открытого класса Java вне его Jar? - PullRequest
2 голосов
/ 16 июля 2010

Я хотел бы иметь возможность аннотировать открытый класс / интерфейс в Java как @NonPublic, что будет означать Этот интерфейс должен использоваться только в этом проекте, он не часть публичного API, экспортируемого этим проектом .

Это обычно для проектов, которые состоят из нескольких файлов JAR. Не все public классы / интерфейсы предназначены для того, чтобы действительно быть открытыми вне вашей фляги.

Вам известен какой-нибудь инструмент / фреймворк / плагин, который это делает?

Ответы [ 3 ]

2 голосов
/ 16 июля 2010

Без OSGi другой распространенной практикой является отделение API от реализации.

Вы можете отделить классы, необходимые во время компиляции, от классов, которые требуются во время выполнения.Чтобы пользователи вашей библиотеки не имели зависимостей от деталей реализации.

myLibAPI.jar   
myLibImpl.jar
2 голосов
/ 16 июля 2010

ИМХО система пакетов в Java - одна из самых испорченных вещей, которые существуют.

Я не знаком с каким-либо стандартным механизмом уровня Java, чтобы сделать это, хотя, вероятно, легко написать инструмент или расширение компилятора, которое будет его применять.

Однако, если выиспользование OSGi (Eclipse написан именно так), одно из его преимуществ - система для определения лучших ограничений на уровне пакетов и модулей.

1 голос
/ 16 июля 2010

OSGi Bundle - это решение.

Если вы хотите преобразовать свой Jar в Eclipse-плагин, вы можете использовать Eclipse RCP release.Щелкните правой кнопкой мыши по вашему проекту: Configure -> Convert to plug-in projects

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