Информация об изменениях

Сообщение Re: Скрытие имплементации при проектировании Java библиотек от 05.06.2023 10:39

Изменено 05.06.2023 10:43 vsb

Re: Скрытие имплементации при проектировании Java библиотек
Механизм называется java modules. Вы указываете, какие пакеты экспортируются. Правда ими далеко не все пользуются, а если не пользуются, то всё это игнорируется.

Второй вариант это использовать два jar. Первый jar клиент подключает как обычно, второй jar клиент подключает как runtime, в итоге при компиляции к классам второго jar он не будет иметь доступа.

Понятно, что если клиент захочет, то получит. Впрочем он и так получит, если захочет, через reflection или редактирование байткода (добавить модификатор public несложно) или ещё как-нибудь.

Если прям совсем не хотите, чтобы туда даже смотрели, можете обфусцировать этот пакет. Формально он останется public, но там никто ничего не поймёт.

А так — в рамках Java 8 ничего сделать нельзя. Если нужно использовать класс из пакета, он должен быть public. Если он public, то его может использовать кто угодно.
Re: Скрытие имплементации при проектировании Java библиотек
Механизм называется java modules. Вы указываете, какие пакеты экспортируются. Правда модулями далеко не все пользуются, а если не пользуются, то всё это игнорируется.

Второй вариант это использовать два jar. Первый jar клиент подключает как обычно, второй jar клиент подключает как runtime, в итоге при компиляции к классам второго jar он не будет иметь доступа.

Понятно, что если клиент захочет, то получит. Впрочем он и так получит, если захочет, через reflection или редактирование байткода (добавить модификатор public несложно) или ещё как-нибудь.

Если прям совсем не хотите, чтобы туда даже смотрели, можете обфусцировать этот пакет. Формально он останется public, но там никто ничего не поймёт.

А так — в рамках Java 8 ничего сделать нельзя. Если нужно использовать класс из пакета, он должен быть public. Если он public, то его может использовать кто угодно.